我有类似的东西:
>>> x = {'id': [1,1,2,2,2,3,4,5,5], 'value': ['a', 'a', 'b', 'b', 'c', 'd', 'e', 'f', 'g']}
>>> df = pd.DataFrame(x)
>>> df
id value
0 1 a
1 1 a
2 2 b
3 2 b
4 2 c
5 3 d
6 4 e
7 5 f
8 5 g
我要过滤此表中不一致的值。例如,带有id=2
或id=5
的列是不一致的,因为相同的id
与不同的值相关联。我已经阅读了有关where
或any
的解决方案,但它们与“比较是否与此id
的列始终具有相同的value
相似”。
我该如何解决这个问题?
答案 0 :(得分:1)
对于您而言,我们对groupby
做transform
+ nunique
unc_df=df[df.groupby('id').value.transform('nunique').ne(1)]
id value
2 2 b
3 2 b
4 2 c
7 5 f
8 5 g
答案 1 :(得分:1)
我想,您可以使用 drop_duplicates
来根据id
列删除重复的行:
In [599]: df.drop_duplicates('id', keep='first')
Out[599]:
id value
0 1 a
2 2 b
5 3 d
6 4 e
7 5 f
因此,以上内容将为重复的value
列选择第一个id
。这样,您在结果数据框中的每个ID就会有1行。
答案 2 :(得分:1)
您可以使用groupby和filter。这应该为您提供编号不一致的ID。
df.groupby('id').filter(lambda x: x.value.nunique()>1)
id value
2 2 b
3 2 b
4 2 c
7 5 f
8 5 g