我有一个数据框架,它在不同的部分有相同的值,它们可以在不同的行和列中。例如,它在两个不同的列中有相同的电子邮件,我想通过此电子邮件获得两个不同行的ID
test1 = pd.DataFrame([{'id': 'iii1', 'phone': 'aaa1', 'email': 'qqq1', 'phone2': 'bbb1', 'email2': 'sss1'},
{'id': 'iii2', 'phone': 'aaa2', 'email': 'qqq2', 'phone2': 'aaa1', 'email2': 'sss2'},
{'id': 'iii3', 'phone': 'aaa3', 'email': 'qqq3', 'phone2': 'bbb3', 'email2': 'sss3'},
{'id': 'iii4', 'phone': 'aaa4', 'email': 'qqq4', 'phone2': 'bbb4', 'email2': 'qqq3'},
{'id': 'iii5', 'phone': 'aaa5', 'email': 'qqq5', 'phone2': 'bbb5', 'email2': 'sss5'},
{'id': 'iii6', 'phone': 'aaa6', 'email': 'qqq6', 'phone2': 'bbb6', 'email2': 'qqq1'}])
我试着通过以下步骤来实现:
test2 = pd.melt(
test1, id_vars=['id'],
value_vars=['phone', 'email', 'phone2', 'email2']
).sort_values(by=['id'], ascending=False).reset_index(drop=True)
def testf(ser):
uniqs = pd.unique(ser.values.ravel()).tolist()
uniqs_len = len(uniqs)
if uniqs_len > 1:
return uniqs
else:
return 'only 1, doesnt interesting'
test3 = test2.groupby('value')['id'].apply(testf).reset_index()
这几乎是我想要的,但是预期结果应该是:[iii1,iii2,iii6]; [iii3,iii4]
我认为另一种方式可以是合并,但我不知道如何实现这一点
您的问题是网络问题。试试
networkx
:输出:
相关问题 更多 >
编程相关推荐