我想過濾具有特定值的組。取下面的樣本資料:
df = pd.DataFrame({'comp': ['a','b','a','b','c','d', 'c', 'c', 'd'], 'grid': [1,2,2,4,1,2,1,2,2]})
的df:
comp grid val
0 a 1 10
1 b 2 11
2 a 2 12
3 b 4 13
4 c 1 14
5 d 2 15
6 c 1 16
7 c 2 17
8 d 2 18
我想comp分組并檢查每個組中grid是否至少有一個值 1 和一個值 2。預期結果是組a和組c
comp grid val
0 a 1 10
2 a 2 12
4 c 1 14
6 c 1 16
7 c 2 17
我試著用groupby和transform,但沒有成功
uj5u.com熱心網友回復:
您可以使用GroupBy.transformwith compare sets:
#if contains 1,2 and some another values
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) >= set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
#if contains only 1,2
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) == set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
如果需要至少一個1和一個2是可能的使用:
intersect = np.intersect1d(df.loc[df['grid'].eq(1),'comp'], df.loc[df['grid'].eq(2),'comp'])
print (intersect)
['a' 'c']
df = df[df['comp'].isin(intersect)]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420935.html
標籤:
