GROUPBY变异性能我经常发现自己想要做将R相当于groupby
然后mutate
,但很多人都指出只需使用groupby
和apply
患有重大的性能问题。所以我的问题是,什么是在pandas中分组数据框的最佳方式,然后根据该组中的某些条件添加一个基于某些计算的新列?在熊猫
我已搜索和搜索,我还没有找到任何关于如何矢量化使用numpy的熊猫自定义函数的指南/步骤。对类似问题的所有答案总是特定于用户,并且不能很好地概括。
编辑:澄清问题的功能和添加玩具数据
df
Out[17]:
ID ID2 col1 col2 col3 value
0 1 J 333.5 333.3 333.4 cat
1 1 S 333.5 333.3 333.8
2 2 J 333.7 333.3 333.8 cat
3 2 S 333.7 333.3 333.4 dog
4 3 L 333.7 333.8 333.9
5 3 D 333.8 333.8 333.9
6 4 S 333.8 333.6 333.7 cat
7 4 J 333.8 333.2 333.8
8 4 J 333.8 333.7 333.9
9 4 L 333.8 333.3 333.4 cat
下面是一些例子,我碰上不断:
- 实施例之一,应用功能基于条件,返回组用原始数据框返回结果。
df.groupby(by=['ID']).apply(myfunc)
def myfunc(group):
group['new_col'] = len(group.query('''ID2=='T' & (col1>=col3 | px<=col2)''').unique())
return group
- 类似于前面的例子,但现在我只希望基于一些条件来更新现有的列,然后返回回来的结果原始数据帧。
df.groupby(by=['ID']).apply(update_func)
def update_func(group):
if 'S' in group['ID2'].values:
group.loc[(group['value']=='cat'), 'other_column'] = False
return group
你有什么具体的例子吗?这是一个开放式的问题,在这个论坛上被认为是广泛的。 –
@ScottBoston我发表了一些例子,它们在当前形式中是否过于宽泛? – guy
是的,如果您有输入和预期输出,这将有所帮助。这在我看来。 –