Python 为什么在合并dataframe中的列值时不消除重复项?

Python 为什么在合并dataframe中的列值时不消除重复项?,python,pandas,dataframe,Python,Pandas,Dataframe,我有如下数据帧值: name foreign_name acronym alias United States États-Unis USA USA 我想将一行中的所有这四列合并为一列“名称”,因此我: merge = lambda x: '|'.join([a for a in x.unique() if a]) df['names'] = df[['name', 'foreign_name', 'acronym', 'alias',]]

我有如下数据帧值:

name             foreign_name   acronym  alias
United States   États-Unis       USA     USA
我想将一行中的所有这四列合并为一列“名称”,因此我:

merge = lambda x: '|'.join([a for a in x.unique() if a])
df['names'] = df[['name', 'foreign_name', 'acronym', 'alias',]].apply(merge, axis=1)
此代码的问题在于,它不会删除重复的“USA”,而是获得:

names = 'United States|États-Unis|USA|USA'

我哪里错了?

您只需要告诉我是沿行轴操作的<代码>轴=1

df.apply(lambda r: "|".join(r.unique()), axis=1)
输出 MCVE:

输出:

            name foreign_name acronym alias                         names
0  United States   États-Unis     USA   USA  United States|États-Unis|USA

要设置的聚合以消除重复项

将集合转换为列表

str.join(“|”)
应用于使用
|
分隔符连接字符串

df['name']=df.agg(set,1).map(list).str.join('|')

只是一个猜测,但是你在上面把你的lamba命名为“merge”,然后你叫“my_join”。否则,如果您将“my|u join”更改为“merge”,我将按预期工作“United Stats Unis | USA”。@ScottBoston我更正了它!这对我来说就像预期的一样。@ScottBoston你用一个有效的例子来测试吗?见下面的答案。。。。一个完全有效的示例。我的示例中的“r”是什么?这是我使用的命名约定
r
是一个系列,因为我使用context
axis=1
调用它来表示行,而不是
s
来表示列如何指定特定列?数据框中可能还有其他列。请提供其他列的示例。指定列有不同的方法,您应用的方法将取决于其他列的数量以及它们在表中的位置。您可以使用loc/iloc访问器对聚合器进行切片和应用。您还可以使用df.filter来过滤和应用agg。也可以使用lambda表达式。给出示例数据集
            name foreign_name acronym alias                         names
0  United States   États-Unis     USA   USA  United States|États-Unis|USA
df['name']=df.agg(set,1).map(list).str.join('|')