python - 在Python中合并两个数据框

标签 python pandas dataframe

如何在Python中覆盖/合并两个数据框,以便添加重叠的单元格(索引、列),并且不常见的单元格保留原始数据框中的值?

这在 Excel 中是可能的,如所解释的 here .

例如: 我有两个数据框

df1 = df1 df2 = df2

我希望输出是这样的

output_df = output_df

最佳答案

您需要addfillna ,但在 df1df2 中必须是 NO NaN 值,因为 fillna 删除了它们:

print (df1.add(df2, fill_value=0).fillna(0).astype(int))
    a    b    c
a1  1    2    0
a2  3  514  123
a3  5  539  134

另一个解决方案 union 索引reindex - 如果 DataFrames 中的 NaN 则有效:

idx = df1.index.union(df2.index)

print (df1.reindex(idx, fill_value=0))
    a  b
a1  1  2
a2  3  4
a3  5  6

print (df2.reindex(idx, fill_value=0))
      b    c
a1    0    0
a2  510  123
a3  533  134

idx = df1.index.union(df2.index)
print (df1.reindex(idx, fill_value=0)
       .add(df2.reindex(idx, fill_value=0), fill_value=0)
       .astype(int))
    a    b    c
a1  1    2    0
a2  3  514  123
a3  5  539  134
<小时/>
df1 = pd.DataFrame({'a':[1,3,5],
                   'b':[2,4,6]}, index=['a1','a2','a3'])

print (df1)
    a  b
a1  1  2
a2  3  4
a3  5  6

df2 = pd.DataFrame({'b':[510,533],
                   'c':[123,np.nan]}, index=['a2','a3'])

print (df2)
      b      c
a2  510  123.0
a3  533    NaN

print (df1.reindex(idx, fill_value=0).add(df2.reindex(idx, fill_value=0), fill_value=0))
      a    b      c
a1  1.0    2    0.0
a2  3.0  514  123.0
a3  5.0  539    NaN
print (df1.add(df2, fill_value=0).fillna(0).astype(int))
    a    b    c
a1  1    2    0
a2  3  514  123
a3  5  539    0 <- replace NaN to 0

关于python - 在Python中合并两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42115950/

相关文章:

python - 获取存储在python字符串中的数据类型

Python:我可以在时间序列等值线中使颜色条静态化吗?

python - Pandas 如何将数组放在单个数据框单元格中?

python - pandas - 添加一个基于现有值的列(bins,qcut)

r - 获得连续数据(R)频率表的更好方法?

scala - 如何在 spark scala 中使用带有 2 列的 array_contains?

scala - 替换 Spark DataFrame 中的空值

python.exe 语法问题 - NPM

python - 在特定条件下计算日期之间

Python 列表迭代问题