我有这样的事情:
>>> 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”。
我该如何解决这个问题?
发布于 2020-05-16 00:20:54
您可以使用groupby和filter。这将为您提供值不一致的ids。
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发布于 2020-05-15 22:56:38
在您的例子中,我们使用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发布于 2020-05-15 23:06:09
我想,您可以使用根据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。您将在结果的dataframe中每id有一行。
https://stackoverflow.com/questions/61829595
复制相似问题