我知道这在数据库软件中是可行的,但有没有办法在Python Pandas中做到这一点?
ID1 ID2 Value
1209345 1203 2
1209345 1204 3 <-----
1209345 1205 4
1209345 1203 2
1209345 1204 7 <-----
1209346 1203 1
1209347 1204 5
我有ID1
,对应于此,我有多个ID2
与值映射。我需要查找ID1
和ID2
匹配的所有条目,但值不同。
我当前的代码计算ID1
和ID2
的唯一组合数,但不考虑每个组合的唯一Value
:
print(df.groupby(['ID1', 'ID2']).size())
ID1 ID2
1209345 1203 2
1204 2
1205 1
1209346 1203 1
1209347 1204 1
dtype: int64
注意:此问题发布于删除了Link to php file的@RohitGirdhar。我发布的解决方案不一定是唯一的或最好的解决方案;鼓励其他答案。
答案 0 :(得分:4)
df = df[df.groupby(['ID1', 'ID2'])['Value'].transform('nunique') > 1]
print (df)
ID1 ID2 Value
1 1209345 1204 3
4 1209345 1204 7
答案 1 :(得分:1)
一种方法是groupby
到set
,过滤生成的系列,然后通过ID1
&amp;组合过滤原始数据框。 ID2
:
grps = df.groupby(['ID1', 'ID2'])['Value'].apply(set)
filtered = grps[grps.map(len) > 1].index
res = df[df.set_index(['ID1', 'ID2']).index.isin(filtered)]
print(res)
ID1 ID2 Value
1 1209345 1204 3
4 1209345 1204 7