我正在寻找使用分隔符连接具有相同名称的列的最快方法。 我的数据框:
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列以上,并且我不想为每列写相同的行,有没有更快的方法来接收我的预期输出?
答案 0 :(得分:3)
concat
和groupby
怎么样?
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)
简单有效的
这应该是你的答案