[英]Merge two python pandas data frames of different length + sum common values
[英]Merge two python pandas data frames of different length but keep all rows in output data frame
我有以下问题:我有两个不同长度的 pandas 数据框,其中包含一些具有共同值和一些不同值的行和列,如下所示:
df1: df2:
Column1 Column2 Column3 ColumnA ColumnB ColumnC
0 a x x 0 c y y
1 c x x 1 e z z
2 e x x 2 a s s
3 d x x 3 d f f
4 h x x
5 k x x
我现在要做的是合并两个数据帧,这样如果 ColumnA 和 Column1 具有相同的值,则来自 df2 的行将附加到 df1 中的相应行,如下所示:
df1:
Column1 Column2 Column3 ColumnB ColumnC
0 a x x s s
1 c x x y y
2 e x x z z
3 d x x f f
4 h x x NaN NaN
5 k x x NaN NaN
我知道合并是可行的
df1.merge(df2,left_on='Column1', right_on='ColumnA')
但是此命令会删除两个文件中 Column1 和 ColumnA 中所有不相同的行。 相反,我想将这些行保留在 df1 中,并在其他行具有来自 df2 的值的列中为它们分配 NaN,如上所示。 在熊猫中有没有一种流畅的方法来做到这一点?
提前致谢!
您可以在此处阅读文档:http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
您正在寻找的是左连接。 默认选项是内部联接。 您可以通过传递不同的 how 参数来更改此行为:
df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
看起来您正在寻找类似左连接的东西。 看看这个例子是否有帮助:http: //pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join
您基本上可以将参数传递给名为how='left'
merge()
使用“concat”怎么样?
数据框列内容不需要相同/匹配,它会附加。
import pandas as pd
from io import StringIO
csvfile = StringIO(
"""Column1 Column2 Column3
a x x
c x x
e x x
d x x
h x x
k x x
""")
csvfile_1 = StringIO(
"""ColumnA ColumnB ColumnC
c y y
e z z
a s s
d f f
""")
df = pd.read_csv(csvfile, sep = '\t', engine='python')
df_1 = pd.read_csv(csvfile_1, sep = '\t', engine='python')
df_1 = df_1.rename({'ColumnA':'Column1'}, axis='columns')
df.set_index('Column1',inplace=True)
df_1.set_index('Column1',inplace=True)
# column contents no need to be the same, it will append
df_final = pd.concat([df,df_1],axis=1,sort=False).reset_index()
print (df_final)
输出为:
index Column2 Column3 ColumnB ColumnC
0 a x x s s
1 c x x y y
2 e x x z z
3 d x x f f
4 h x x NaN NaN
5 k x x NaN NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.