[英]Filter Pandas dataframe by aggregated booleans
我正在使用相對較大的數據集(〜400,000 x 76)。 我想根據匯總列表過濾數據集。 下面是簡化的示例:
full_list ={
'bob':1,'rick':1,'jim':1,'tim':1,'bob':1,
'janet':1,'denise':1,'bob':1,'jim':1,'jessica':1}
nameDF = pd.DataFrame({
'Name':full_list.keys(),
'Value':full_list.values()})
big_names = nameDF.Name.value_counts() > 1
big_names returns [True, False, True, False, False, False, False]
我想使用big_names
的結果來過濾full_list。 基本上,我想過濾原始數據幀以僅顯示與布爾值聚合列表的結果有關的數據。 請幫忙!
我認為需要從list
或其他方式創建DataFrame
,因為按設計的dictionary
不支持重復鍵:
full_list = ['bob','rick','jim','tim','bob','janet','denise','bob','jim','jessica']
nameDF = pd.DataFrame({'Name':full_list})
print (nameDF)
Name
0 bob
1 rick
2 jim
3 tim
4 bob
5 janet
6 denise
7 bob
8 jim
9 jessica
然后通過GroupBy.transform
篩選與原始DataFrame
大小相同的返回計數,因此可以通過boolean indexing
進行篩選:
big_names = nameDF[nameDF.groupby('Name')['Name'].transform('size') > 1 ]
print (big_names)
Name
0 bob
2 jim
4 bob
7 bob
8 jim
詳細資料 :
print (nameDF.groupby('Name')['Name'].transform('size'))
0 3
1 1
2 2
3 1
4 3
5 1
6 1
7 3
8 2
9 1
Name: Name, dtype: int64
print (nameDF.groupby('Name')['Name'].transform('size') > 1)
0 True
1 False
2 True
3 False
4 True
5 False
6 False
7 True
8 True
9 False
Name: Name, dtype: bool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.