我在使用 Pandas 对一组数据每行求和时遇到了很多麻烦。 我尝试更好地解释。
我有一个数据框(见下文),我想在其中计算每个块中存在的 event_code 列中“闪烁”的事件数量(event_block 中从 0 到 5)。 假设每个块的行数相同。
谢谢您的帮助!
event_block event_code
0 0 blink
1 0 blink
2 0 -1
3 0 -1
4 0 -1
5 1 -1
6 1 blink
7 1 -1
8 1 blink
9 1 -1
我尝试了多种方法来获得一个优雅的解决方案,但没有成功。 我的想法是为闪烁事件生成 0 和 1 的二进制向量,然后为每个事件块生成总和,但我总是在每个块的每一行中得到相同的总和数...
result_df['is_blink'] = (result_df['event_code'] == 'blink').astype(int)
根据需要输出:
blink_count
1
2
0
1
0
使用
groupby
:
>>> df.groupby("event_block")["event_code"].agg(lambda x: x.eq("blink").sum())
groupby.cumcount
生成计数器,然后 groupby.sum
:
(df['event_code'].eq('blink')
.groupby(df.groupby('event_block').cumcount())
.sum()
)
输出:
0 1
1 2
2 0
3 1
4 0
Name: event_code, dtype: int64