我正在使用相对较大的数据集(〜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。基本上,我想过滤原始数据帧以仅显示与布尔值聚合列表的结果有关的数据。请帮忙!
答案 0 :(得分:0)
我认为需要从DataFrame
或其他方式创建list
,因为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