我正在與熊貓羣體奮鬥,這可能很容易解決。 例如熊貓羣體標準
name number
A 10
A 8
B 7
B 6
B 9
在該數據集,什麼是最簡單的矢量化方法,利用該可以排除類別的所有行項目(列)「名」,其中的「數量」的最小值爲8以下。 在上述所有B將被刪除,因爲最小有一個元素的值低於8.
我相信它必須可能與groupby
,apply
或filter
,但不記得,如何。
我正在與熊貓羣體奮鬥,這可能很容易解決。 例如熊貓羣體標準
name number
A 10
A 8
B 7
B 6
B 9
在該數據集,什麼是最簡單的矢量化方法,利用該可以排除類別的所有行項目(列)「名」,其中的「數量」的最小值爲8以下。 在上述所有B將被刪除,因爲最小有一個元素的值低於8.
我相信它必須可能與groupby
,apply
或filter
,但不記得,如何。
使用filter
In [3281]: df.groupby('name').filter(lambda x: x['number'].min() >= 8)
Out[3281]:
name number
0 A 10
1 A 8
詳細
In [3282]: df
Out[3282]:
name number
0 A 10
1 A 8
2 B 7
3 B 6
4 B 9
您可以使用transform
與min
的面具和boolean indexing
的過濾器:
print (df.groupby('name')['number'].transform('min') >=8)
0 True
1 True
2 False
3 False
4 False
Name: number, dtype: bool
df = df[df.groupby('name')['number'].transform('min') >=8]
print (df)
name number
0 A 10
1 A 8
很多感謝您的幫助! –
@GigiHofleitner別忘了投票表達你的感激之情。 – Dark
這也可以用apply
來完成(爲了完整起見)。
mask = df.groupby('name')['number'].apply(lambda x : (x>=8).all())
# or Thanks @Zero mask = df.groupby('name')['number'].min() >= 8
df[df['name'].isin(mask[mask].index)]
輸出:
name number 0 A 10 1 A 8
非常感謝!我之前嘗試過,但是在某個地方犯了一個錯誤......現在我複製了你的代碼並且它可以工作!超快速響應! –