[英]How to use, groupby with conditions and then cumcount in Pandas DataFrame
[英]Use cumcount on pandas dataframe with a conditional increment
考慮數據框
df = pd.DataFrame(
[
['A', 1],
['A', 1],
['B', 1],
['B', 0],
['A', 0],
['A', 1],
['B', 1]
], columns = ['key', 'cond'])
我想為每個key
找到一個累積(運行)計數(從 1 開始),如果組中的前一個值cond == 1
,我們只會增加。 當附加到上述數據框時,這將給出
df_result = pd.DataFrame(
[
['A', 1, 1],
['A', 1, 2],
['B', 1, 1],
['B', 0, 2],
['A', 0, 3],
['A', 1, 3],
['B', 1, 2]
], columns = ['key', 'cond'])
請注意,基本上每個key
組中最后一行的cond
值沒有影響。
只是做一個簡單的group
和cumcount
df.groupby('key').cumcount()
當然不考慮前一個元素的cond
值。 我如何才能考慮到這一點?
編輯
由於下面的一些解決方案在某些邊緣情況下不起作用,我將提供一個更全面的數據框進行測試。
df = pd.DataFrame(
[
['A', 0],
['A', 1],
['A', 1],
['B', 1],
['B', 0],
['A', 0],
['A', 1],
['B', 1],
['B', 0]
], columns = ['key', 'cond'])
在附加真實結果時應該給出
df_result = pd.DataFrame(
[
['A', 0, 1],
['A', 1, 1],
['A', 1, 2],
['B', 1, 1],
['B', 0, 2],
['A', 0, 3],
['A', 1, 3],
['B', 1, 2],
['B', 0, 3]
], columns = ['key', 'cond'])
df['cnt'] = df[df["cond"]==1].groupby('key').cumcount()+1
df['cnt'] = df.groupby('key')['cnt'].fillna(method='bfill')
df
# => key cond cnt
# 0 A 1 1.0
# 1 A 1 2.0
# 2 B 1 1.0
# 3 B 0 2.0
# 4 A 0 3.0
# 5 A 1 3.0
# 6 B 1 2.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.