从两个数据框(熊猫)连接两个相同的列

时间:2019-11-12 14:52:02

标签: python pandas

我正在寻找使用分隔符连接具有相同名称的列的最快方法。 我的数据框:

df1:
A,B,C,D
my,he,she,it

df2:
A,B,C,D
dog,cat,elephant,fish

预期输出:

df:
A,B,C,D
my:dog,he:cat,she:elephant,it:fish

如您所见,我想合并两个同名的具有相同名称的列。 我可以在A列中使用此代码:

df=df1.merge(df2)
df['A'] = df[['A_x','A_y']].apply(lambda x: ':'.join(x), axis = 1)

在我的真实数据集中,我有30列以上,并且我不想为每列写相同的行,有没有更快的方法来接收我的预期输出?

4 个答案:

答案 0 :(得分:3)

concatgroupby怎么样?

df3 = pd.concat([df1,df2],axis=0)
df3 = df3.groupby(df3.index).transform(lambda x : ':'.join(x)).drop_duplicates()
print(df3)
         A       B             C        D
0  my:dog  he:cat  she:elephant  it:fish

答案 1 :(得分:2)

怎么样?

df3 = df1 + ':' + df2
print(df3)
       A       B         C             D 
0   my:dog  he:cat  she:elephant    it:fish

这很好,因为如果有不匹配的列,您将得到NaN,因此如果需要,可以稍后进行过滤:

df1 = pd.DataFrame({'A': ['my'], 'B': ['he'], 'C': ['she'], 'D': ['it'], 'E': ['another'], 'F': ['and another']})
df2 = pd.DataFrame({'A': ['dog'], 'B': ['cat'], 'C': ['elephant'], 'D': ['fish']})
df1 + ':' + df2
       A       B          C             D    E   F
0   my:dog  he:cat  she:elephant    it:fish NaN NaN

答案 2 :(得分:1)

您可以通过简单地将两个数据帧与分隔符相加来完成此操作。

import pandas as pd

df1 = pd.DataFrame(columns=["A", "B", "C", "D"], index=[0])
df2 = pd.DataFrame(columns=["A", "B", "C", "D"], index=[0])

df1["A"] = "my"
df1["B"] = "he"
df1["C"] = "she"
df1["D"] = "it"
df2["A"] = "dog"
df2["B"] = "cat"
df2["C"] = "elephant"
df2["D"] = "fish"

print(df1)
print(df2)

df3 = df1 + ':' + df2
print(df3)

这将为您提供如下结果:

A   B    C   D
0  my  he  she  it
     A    B         C     D
0  dog  cat  elephant  fish
        A       B             C        D
0  my:dog  he:cat  she:elephant  it:fish

这是您要实现的目标吗?虽然,这仅在两个数据框中的列相同时才有效。多余的列将具有nan。您要如何处理df1和df2中不相同的列?请在下面发表评论,以帮助我更好地了解您的问题。

答案 3 :(得分:-1)

您可以简单地做到:

df = df1 + ':' + df2
print(df)

简单有效的

这应该是你的答案

相关问题