提问人:Giovanni Chiarion 提问时间:10/31/2023 最后编辑:Giovanni Chiarion 更新时间:10/31/2023 访问量:104
逐行对 Pandas 中的数据组求和
Summing group of data in Pandas row by row
问:
在使用 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
我尝试了多种方法来获得一个优雅的解决方案,但没有成功。 我的想法是为 blink 事件生成一个 0 和 1 的二进制向量,并为每个事件块生成 than sum,但我总是在每个块的每一行中得到相同的求和数字......
result_df['is_blink'] = (result_df['event_code'] == 'blink').astype(int)
根据需要输出:
blink_count
1
2
0
1
0
答:
0赞
mozway
10/31/2023
#1
首先使用 groupby.cumcount 生成一个计数器,然后使用 groupby.sum
:
out = (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
如果还需要 的计数,请使用交叉表
:-1
out = pd.crosstab(df.groupby('event_block').cumcount(), df['event_code'])
输出:
event_code -1 blink
row_0
0 1 1
1 0 2
2 2 0
3 1 1
4 2 0
评论
0赞
Giovanni Chiarion
10/31/2023
非常感谢您的回答!它有效!但是,我可以问您,如果我有另一个名为“条件”的分类列,并且我必须计算每个条件中每个event_block中的眨眼事件,我该如何处理同样的问题?我应该在哪里添加这个新的分组因子?我很困惑......
0赞
Gabriel Santello
10/31/2023
#2
使用 groupby.ffill,然后使用 groupby.sum
m = result_df["event_code"].eq("blink").groupby(result_df["event_block"]).transform("ffill")
result_df["is_blink"] = np.where(m, 1, 0)
summary = result_df.groupby('event_block')[['is_blink']].sum()
输出示例:
event_block is_blink
1 2
2 2
3 0
评论