我有以下數據框:
id outcome
0 3 no
1 3 no
2 3 no
3 3 yes
4 3 no
5 5 no
6 5 no
7 5 yes
8 5 no
9 5 yes
10 6 no
11 6 no
12 6 yes
13 6 no
14 6 no
我想刪除no
a 之前序列開頭的結果yes
,並保留所有其他no
結果,因此輸出數據幀如下所示:
id outcome
3 3 yes
4 3 no
7 5 yes
8 5 no
9 5 yes
12 6 yes
13 6 no
14 6 no
目前我已經嘗試過這個:
df = pd.DataFrame(data={
'id': [3, 3, 3, 3, 3, 5, 5, 5, 5, 6, 6, 6, 6, 6],
'outcome': ['no', 'no', 'no', 'yes', 'no', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'no', 'no']
})
df = df[df.groupby('id').outcome.transform(lambda x: x.ne('no'))]
但是,這只是刪除了所有no
結果。
我知道然後我需要獲取這些行的索引並將它們從數據框中刪除。有什麼建議?
使用groupby
withcumsum
在開頭用 0 標記所有“否”:
df['no_group'] = df.groupby('id')['outcome'].apply(lambda x: x.eq('yes').cumsum())
現在,要刪除的“否”數是:
num_no_to_remove = (df['no_group'] == 0).sum()
並且可以通過過濾獲得想要的數據幀:
df.loc[df['no_group'] > 0].drop(columns=['no_group'])
結果:
id outcome
3 3 yes
4 3 no
7 5 yes
8 5 no
9 5 yes
12 6 yes
13 6 no
14 6 no
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句