![](/img/trans.png)
[英]pyspark sum of rows to get one new row based on values in another column in 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.