簡體   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