Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have the following data.

ID1 ID2 Value
1    2   5.5
2    1    10
1    3    5

Expected output:

ID1 ID2 Value
1    2   5.5
2    1    10

I only want to hold data, when I have a value for the symmetrical entry. If I only have a entry e.g. with ID1=1 and ID2=3 but no entry for ID1=3 and ID2=1 then I want to delete this datarow. How can I do this with pandas?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
2.0k views
Welcome To Ask or Share your Answers For Others

1 Answer

If all values in pairs in columns ID1 and ID2 are unique first create helper DataFrame with np.sort and return all duplicated rows with DataFrame.duplicated:

df1 = pd.DataFrame(np.sort(df[['ID1','ID2']], axis=1), index=df.index)

df = df[df1.duplicated(keep=False)]
print (df)
   ID1  ID2  Value
0    1    2    5.5
1    2    1   10.0

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...