我想從特定列從1到的資料框中獲取所有用戶0。
例如,對于以下資料框,我只想保留用戶 1 和 2,因為他們的值從1到0。
相關行
- 用戶 1 的第 6 到 7 行
- 用戶 2 的第 9 到 10 行
user value
0 0 0
1 0 0
2 0 1
3 0 1
4 1 0
5 1 1
6 1 1
7 1 0
8 2 1
9 2 1
10 2 0
11 2 0
期望的結果
user value
4 1 0
5 1 1
6 1 1
7 1 0
8 2 1
9 2 1
10 2 0
11 2 0
我已經嘗試過視窗函式和條件,但由于某種原因我無法得到想要的結果。
uj5u.com熱心網友回復:
讓我們試試cummax
df.loc[df.user.isin(df.loc[df.value != df.groupby('user')['value'].cummax(),'user'])]
Out[769]:
user value
4 1 0
5 1 1
6 1 1
7 1 0
8 2 1
9 2 1
10 2 0
11 2 0
uj5u.com熱心網友回復:
您可以使用GroupBy.filter. 如果任何一個diff(連續值的差)等于-1 (0-1),則保留該組。
df.groupby('user').filter(lambda g: g['value'].diff().eq(-1).any())
注意。這假設您只有 0 和 1,如果您可以有其他數字,您還需要使用兩個條件:(g['value'].eq(1)&g['value'].shift(-1).eq(0)).any()
輸出:
user value
4 1 0
5 1 1
6 1 1
7 1 0
8 2 1
9 2 1
10 2 0
11 2 0
uj5u.com熱心網友回復:
您可以使用shift檢查下一個值是否為1( df.value.shift(1).eq(1)),并將其與掩碼結合使用,檢查當前值是否為0( df.value.eq(0))。然后,按'user'和分組transform('any')以創建適當的掩碼:
filtered = df[(df.value.eq(0) & df.value.shift(1).eq(1)).groupby(df.user).transform('any')]
輸出:
>>> filtered
user value
4 1 0
5 1 1
6 1 1
7 1 0
8 2 1
9 2 1
10 2 0
11 2 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441976.html
上一篇:Numpy-平面陣列的串列串列
