【发布时间】:2019-08-11 11:39:13
【问题描述】:
我有一个如下的数据框:
df = pd.DataFrame({'col_1': [2,2,2,3,3,3,3],
'col_2': [1,2,3,1,2,3,4],
'col_3':['A','A','A','B','B','B','B']})
col_1 col_2 col_3
0 2 1 A
1 2 2 A
2 2 3 A
3 3 1 B
4 3 2 B
5 3 3 B
6 3 4 B
我想将col_2 与col_1 >= col_2 相加。
期望的输出应该是:
col_1 col_2 col_3 col_4
0 2 1 A 3
1 2 2 A 3
2 2 3 A 3
3 3 1 B 6
4 3 2 B 6
5 3 3 B 6
6 3 4 B 6
我来了:
df.groupby(['col_3']).apply(lambda x: x.loc[x['col_1'] >= x['col_2']]['col_2'].sum())
但是,当数据变大(数百万行)时,这会非常慢,有没有更有效的方法?
【问题讨论】:
-
感谢您的快速回复,我希望结果是在组级别,这样我可以方便地在组内保存 col_4 的值。但您的评论在某种意义上确实启发了对于这项特定任务,我可以简单地放弃不符合标准的观察并计算每组的观察数量,我认为这可能比当前更节省时间。无论如何,一般来说,最好为此类任务提供更有效的解决方案。有什么想法吗?
标签: python pandas apply pandas-groupby