我經歷了不同的 stackoverflow 問題并最終發布它,因為我無法解決我面臨的問題之一。我有一個如下所示的資料框
A B C
group1 group1_c 12
group1 group1_c 12
group1 group1_c 12
group1 group1_c 1
group1 group1_c 12
group1 group1_c 12
我必須將兩行匹配在一起,每當值匹配時,我就對其進行求和。去做這個,
df['cumul'] = df['C'].eq(df.groupby(['A','B'])['C'].shift(1).ffill()).groupby([df['A'],df['B']).cumsum()
一旦我這樣做,
A B C Cumul
group1 group1_c 12 0
group1 group1_c 12 1
group1 group1_c 12 2
group1 group1_c 1 2
group1 group1_c 12 3
group1 group1_c 12 3
而如果條件不滿足,我想重置。預期的解決方案
A B C Cumul
group1 group1_c 12 0
group1 group1_c 12 1
group1 group1_c 12 2
group1 group1_c 1 0
group1 group1_c 12 0
group1 group1_c 12 1
請指教 謝謝
uj5u.com熱心網友回復:
如果需要對每個列的連續值C使用Series.newithSeries.shift和累積總和進行計數,最后使用 counter by GroupBy.cumcount:
df['cumul'] = df.groupby(df['C'].ne(df['C'].shift()).cumsum()).cumcount()
print (df)
A B C cumul
0 group1 group1_c 12 0
1 group1 group1_c 12 1
2 group1 group1_c 12 2
3 group1 group1_c 1 0
4 group1 group1_c 12 0
5 group1 group1_c 12 1
如果需要A, B每組還添加兩個組:
print (df)
A B C
0 group1 group1_c 12
1 group1 group2_c 12 <-changed groups
2 group1 group2_c 12 <-changed groups
3 group1 group1_c 1
4 group1 group1_c 12
5 group1 group1_c 12
s = df['C'].ne(df['C'].shift()).cumsum()
df['cumul'] = df.groupby([df['A'],df['B'], s]).cumcount()
df['cumul1'] = df.groupby(df['C'].ne(df['C'].shift()).cumsum()).cumcount()
print (df)
A B C cumul cumul1
0 group1 group1_c 12 0 0
1 group1 group2_c 12 0 1
2 group1 group2_c 12 1 2
3 group1 group1_c 1 0 0
4 group1 group1_c 12 0 0
5 group1 group1_c 12 1 1
替代解決方案:
s = df[['A','B','C']].ne(df[['A','B','C']].shift()).any(axis=1).cumsum()
df['cumul'] = df.groupby(s).cumcount()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511903.html
標籤:Python熊猫麻木的
下一篇:Numpy在哪里起作用
