簡體   English   中英

按匯總布爾值過濾Pandas數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM