繁体   English   中英

使用 pandas groupby 根据另一个值的重复范围对列的行求和

[英]sum rows of column based on a repeating range of values in another with pandas groupby

我有一个 DataFrame 有几千行,看起来像这样:

Index Chan Pick
1      1   0.001
2      2   0.001
3      3   0.001
4      4   0.001
5      1   0.003
6      2   0.003
7      3   0.003
8      1   0.006
9      2   0.006
10     1   0.002
11     2   0.002
12     3   0.002
13     4   0.002
14     5   0.002
15     6   0.002

channel Chan列的值范围可以从 1 到 24(有时可能有所有 24 个值,有时可能只有 2 个值或 6 个值,等等,如上所示)。 Pick列中的值对于每组通道值通常是相同的。

我需要来自公共通道块的Pick列中的平均值(即第一个块的平均值为 0.001...第二个块的平均值为 0.003,因为Pick值都相同,但有时它们可能不同)。

我知道我需要使用类似于:

df.groupby('Chan')['Pick'].mean()

但我不知道如何实现Chan可以从 1 到 24 然后模式重新开始的事实(即Chan列可以是 1 到 4,或 1 到 22,或 1 到 17,等等)

Chan值恰好为 1 时,通道块实质上开始。我们必须利用此属性来完成任务。

channel_id成为一个变量,用唯一的渐进标识符标识每个块。 我们可以这样定义它:

channel_id = (df["Chan"] == 1).cumsum()

其中(df["Chan"] == 1)在每个块开始的地方创建一个带有True的掩码,然后cumsum完成在块上传播标识符并在每次新块开始时增加它的工作。

现在我们只需根据此标识符进行group by并取Pick列的平均值:

df.groupby(channel_id)["Pick"].mean()

您可以在一行中完成所有操作而无需补充变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM