我有一個資料框架,如下圖所示
person_id source_system r_diff
1 O NULL
1 O 0
1 O 9
1 O NULL
2 O574
2 I 20
2 O135
2 O 0
2 I 21
2 O 2
2 O 0
2 O 0
2 I 12
我想根據下面的標準來選擇行
標準1 - 挑選所有源系統=I的行。
標準2--只有當第(n-1)行的源系統為O且差異為零時,才會選擇前面的行(n-1)。
只有當第n行的源系統=I時,這個標準2才會被應用。如果第(n-1)行的源系統是I,我們不需要做任何事情,因為標準1將處理這個問題。
我們必須對每個人適用這兩個標準
。我根據SO的建議嘗試了下面的方法,但不知道如何使它作業
我們必須對每個人應用這兩個標準
我們必須對每個人應用這兩個標準。
m1 = df['visit_source_value'] == 'I'
m2 = df['diff'] <=0
m3 = df.groupby('person_id')['diff'].shift(-1) <=0
df = df1[m1 | m2 | m3] 。
我希望我的輸出結果如下所示
2 我 20
2 O 0
2 I 21
2 O 0
2 I 12
uj5u.com熱心網友回復:
我不喜歡單行的解決方案,因為如果代碼比較復雜的話,很難讀懂,所以最好是使用:
m1 = df['visitor_source_value'] == 'I'
m2 = df['r_diff'] <=0
m3 = df.groupby('person_id')['visit_source_value'].shift(-1) == 'I'
df = df[m1 | (m2 & m3)]
print (df)
person_id visit_source_value r_diff
5 2 I 20.0
7 2 O0.0
8 2 I 21.
11 2 O0.0
12 2 I 12.0
uj5u.com熱心網友回復:
你可以用一行來做:
你可以用一行來做。
>>> df[df['source_system'/span>]. eq('I') | (df['source_system'] 。 shift(-1).eq('I') & df['r_diff'].le(0) ]
person_id source_system r_diff
5 2 I20.0
7 2 O0.0
8 2 I 21.
11 2 O0.0
12 2 I 12.
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326396.html
標籤:
