If I have a function f
that I am applying to more than once to a set of columns, what's a more Pythonic way of going about it. Right now, what I am doing is this.
newdf=df.groupby(['a', 'b']).apply(lambda x: f(x, 1))
newdf.columns=['1']
newdf['2']=df.groupby(['a', 'b']).apply(lambda x: f(x, 2))
newdf['3']=df.groupby(['a', 'b']).apply(lambda x: f(x, 3))
newdf['4']=df.groupby(['a', 'b']).apply(lambda x: f(x, 4))
Is there a better way of going about it?
Thanks,
That's pythonic enough for me:
columns_dict = dict()
for i in range(1, 5):
columns_dict[str(i)] = df.groupby(["a", "b"]).apply(lambda x: f(x, i))
pd.DataFrame(columns_dict)
You could do :
pandas.DataFrame([df.groupby(['a','b']).apply(lambda x : f(x,i)) for i in range(1,5)])
Then transpose the new DataFrame if you want to have same column names as the initial dataframe.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With