Python 合并并合并不同数据帧的两列

Python 合并并合并不同数据帧的两列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个数据帧: ID word 1 srv1 2 srv2 3 srv1 4 nan 5 srv3 6 srv1 7 srv5 8 nan 我需要的是合并ID上的2个数据帧,并合并列word以获得: ID word 1

我有两个数据帧:

ID             word
1              srv1
2              srv2
3              srv1
4              nan
5              srv3
6              srv1
7              srv5
8              nan
我需要的是合并ID上的2个数据帧,并合并列word以获得:

ID             word
1              srv1 
2              srv2 , srv12
3              srv1 , srv10
4              srv8
5              srv3 , srv4
6              srv1 , srv7
7              srv5
8              srv9
使用以下代码

merge=pandas.merge(df1,df2,on=“ID”,how=“left”)
合并[“单词”]=合并[单词x]+,“+合并[“单词y”]
我得到:

ID             word
1              nan 
2              srv2 , srv12
3              srv1 , srv10
4              nan
5              srv3 , srv4
6              srv1 , srv7
7              nan
8              nan
这不是正确的解决方案。

您可以使用和
na_rep
选项填充
word
列,即使是
nan
中的一个源列,然后使用
str.strip
来修剪任何不在单词之间的前导/尾随

m['word'] = m['word_x'].str.cat(m['word_y'], sep=' , ', na_rep='').str.strip(' , ')
返回

   ID word_x word_y          word
0   1   srv1    NaN          srv1
1   2   srv2  srv12  srv2 , srv12
2   3   srv1  srv10  srv1 , srv10
3   4    NaN   srv8          srv8
4   5   srv3   srv4   srv3 , srv4
5   6   srv1   srv7   srv1 , srv7
6   7   srv5    NaN          srv5
7   8    NaN   srv9          srv9

根据我认为你想要做的,我首先要去掉那些
nan

df_1.fillna(value="")
df_2.fillna(value="")
然后我会再次尝试合并,看看是否得到所需的值。

您可以使用选择现有值或连接的值

试试这个:

将熊猫作为pd导入
将numpy作为np导入
从io导入StringIO
df1=pd.read\U csv(StringIO(“”)
ID字
1 srv1
2 srv2
3 srv1
4楠
5 srv3
6 srv1
7 srv5
8 nan“”,sep=r“\s+”)
df2=pd.read\U csv(StringIO(“”)
ID字
1楠
2 srv12
3 srv10
4 srv8
5 srv4
6 srv7
7南
8 srv9“”,sep=r“\s+”)
条件=[(~df1[“word”].isna())和df2[“word”].isna(),df1[“word”].isna()&(~df2[“word”].isna()),(~df1[“word”].isna())和(~df2[“word”].isna())]
选项=[df1[“word”]、df2[“word”]、df1[“word”]+、“+df2[“word”]]
df1[“word”]=np.select(条件、选项)
打印(df1)
输出:

   ID        word
0   1        srv1
1   2  srv2,srv12
2   3  srv1,srv10
3   4        srv8
4   5   srv3,srv4
5   6   srv1,srv7
6   7        srv5
7   8        srv9

看起来它在对我做预期的事情。。。您希望如何处理
nan
?当您有
nan
时,添加的内容将解析为
nan
,因此请确保您只对非
nan
值执行
merge
+
merge
,这是一个很好的解决方案!
   ID        word
0   1        srv1
1   2  srv2,srv12
2   3  srv1,srv10
3   4        srv8
4   5   srv3,srv4
5   6   srv1,srv7
6   7        srv5
7   8        srv9