Python 如何对某些列使用df.groupby(cols.apply)(my_func),而保留一些未处理的列?
假设我有一个数据帧Python 如何对某些列使用df.groupby(cols.apply)(my_func),而保留一些未处理的列?,python,pandas,Python,Pandas,假设我有一个数据帧df有a、b、c、d…z列。我想:df.groupby('a')。对d-z列应用(my_func()),而将'b'和'c'列保持不变。怎么做 我注意到熊猫可以通过传递dict对不同的列应用不同的函数。但我有一个很长的列列表,只想设置参数或提示参数,让Pandas绕过一些列,将my_func()应用到其余的列?(否则,我必须构建一个长dict)一个简单(通用)的方法是使用您感兴趣的子集创建数据帧视图(或者,在您的案例中,使用一个视图,其中包含除您希望忽略的列之外的所有列),然后使
df
有a、b、c、d…z列。我想:df.groupby('a')。对d-z
列应用(my_func())
,而将'b'和'c'列保持不变。怎么做
我注意到熊猫可以通过传递dict对不同的列应用不同的函数。但我有一个很长的列列表,只想设置参数或提示参数,让Pandas绕过一些列,将my_func()
应用到其余的列?(否则,我必须构建一个长dict)一个简单(通用)的方法是使用您感兴趣的子集创建数据帧视图(或者,在您的案例中,使用一个视图,其中包含除您希望忽略的列之外的所有列),然后使用APPLY来创建该视图
In [116]: df
Out[116]:
a b c d f
0 one 3 0.493808 a bob
1 two 8 0.150585 b alice
2 one 6 0.641816 c michael
3 two 5 0.935653 d joe
4 one 1 0.521159 e kate
使用您喜欢的方法创建所需的视图。您可以选择一系列列,如sodf_view=df.ix[:,'b':'d']
,但以下内容可能对您的场景更有用:
#I want all columns except two
cols = df.columns.tolist()
mycols = [x for x in cols if not x in ['a','f']]
df_view = df[mycols]
将您的函数应用于该视图。(注意,这还没有改变df中的任何内容。)
使用Update()更新df
In [158]: df_view.apply(lambda x: x /2)
Out[158]:
b c d
0 1 0.246904 20
1 4 0.075293 25
2 3 0.320908 28
3 2 0.467827 28
4 0 0.260579 24
In [156]: df.update(df_view.apply(lambda x: x/2))
In [157]: df
Out[157]:
a b c d f
0 one 1 0.246904 20 bob
1 two 4 0.075293 25 alice
2 one 3 0.320908 28 michael
3 two 2 0.467827 28 joe
4 one 0 0.260579 24 kate