Python 选择表中Id相同但值不同的行
我知道这在数据库软件中是可能的,但有没有办法在Python中实现呢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 注意:这个问题
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