Python 选择表中Id相同但值不同的行

Python 选择表中Id相同但值不同的行,python,pandas,dataframe,Python,Pandas,Dataframe,我知道这在数据库软件中是可能的,但有没有办法在Python中实现呢 ID1 ID2 Value 1209345 1203 2 1209345 1204 3 <----- 1209345 1205 4 1209345 1203 2 1209345 1204 7 <----- 1209346 1203 1 1209347 1204 5 注意:这个问题

我知道这在数据库软件中是可能的,但有没有办法在Python中实现呢

ID1         ID2      Value
1209345     1203     2
1209345     1204     3 <-----
1209345     1205     4
1209345     1203     2
1209345     1204     7 <-----
1209346     1203     1
1209347     1204     5

注意:这个问题是为@RohitGirdhar发布的,他删除了他的。我发布的解决方案不一定是唯一或最好的;鼓励其他答案。

一种方法是将
groupby
设置为
set
,过滤生成的序列,然后通过组合
ID1
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
您可以使用和进行筛选:

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
df = df[df.groupby(['ID1', 'ID2'])['Value'].transform('nunique') > 1]

print (df)
       ID1   ID2  Value
1  1209345  1204      3
4  1209345  1204      7