组合Pandas列中的两个唯一值,如果它们在另一列中具有相同的值[重复]

pftdvrlh  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(132)

此问题已在此处有答案

Pandas transform('unique') output as comma separate string instead of list(3个答案)
13小时前关闭
假设我在Python中有一个非常大的Pandas数据框,看起来像这样:

df_test = pd.DataFrame(data = None, columns = ['file','source'])
df_test.file = ['file_1', 'file_1', 'file_2', 'file_2', 'file_3', 'file_3']
df_test.source = ['usa', 'uk', 'jp', 'sk', 'au', 'nz']

我想从这里得到的是'source'列将唯一的源组合成一个字符串,用'分隔两个唯一的源;'file'列中每个相同的值。因此,“source”列的最终结果应该是:

['usa; uk', 'usa; uk', 'jp; sk', 'jp; sk', 'au; nz', 'au; nz']

由于“file”列中的“file_1”具有两个源“usa”和“uk”等。实际的 Dataframe 非常大,因此必须自动完成而不是手动完成。任何关于如何做到这一点的帮助将不胜感激,谢谢!

eni9jsuy

eni9jsuy1#

GroupBy.transform中使用lambda函数,删除dict.fromkeys中或set s中的重复值:

df_test['new'] = (df_test.groupby('file')['source']
                         .transform(lambda x: '; '.join(dict.fromkeys(x))))
print(df_test)
     file source      new
0  file_1    usa  usa; uk
1  file_1     uk  usa; uk
2  file_2     jp   jp; sk
3  file_2     sk   jp; sk
4  file_3     au   au; nz
5  file_3     nz   au; nz
df_test['new'] = df_test.groupby('file')['source'].transform(lambda x: '; '.join(set(x)))
print(df_test)
     file source      new
0  file_1    usa  uk; usa
1  file_1     uk  uk; usa
2  file_2     jp   jp; sk
3  file_2     sk   jp; sk
4  file_3     au   nz; au
5  file_3     nz   nz; au

相关问题