我有一個資料框架:
id value
a1 0
a1 1
a1 2 2
a1 3 3
a2 0 0
a2 1 1
a3 0 0
a3 1 1
a3 2 2
a3 3
我想過濾id,只留下那些值大于3的id。所以在這個例子中,id a2必須被洗掉,因為它只有0和1的值。 所以希望得到的結果是:
id value
a1 0
a1 1
a1 2 2
a1 3 3
a3 0 0
a3 1 1
a3 2 2
a3 3 3
a3 4 4
a3 5
如何在pandas中做到這一點?
uj5u.com熱心網友回復:
Updated.
按ID分組并找到它們的最大值。找到最大值在3或以上的ID:
keep = df.groupby('id')['value']。 max() >= 3。
選擇ID匹配的行:
df[df['id'].isin(keep[keep].index)]
uj5u.com熱心網友回復:
使用布爾掩碼來保留符合條件的行,然后用下一個id(a3)替換壞的id(a2)。最后,再次通過id進行分組,并應用一個累積和。
mask = df.groupby('id') ['value']
.transform(lambda x: sorted(x.tolist()) == [0, 1, 2, 3] )
df1 = df[mask].reindex(df.index).bfill()
df1['value'] = df1.groupby('id').agg('cumcount')
輸出:
>>> df1
id值
0 a1 0
1 a1 1
2 a1 2
3 a1 3
4 a3 0
5 a3 1
6 a3 2
7 a3 3
8 a3 4
9 a3 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323163.html
標籤:
下一篇:Python。如何在<spanclass='pos'><spanclass='arr_udarrow_u5'></span>
