python - 在python中合并df

标签 python pandas dataframe merge

假设我有两个 DataFrame

df1 = pd.DataFrame({'A':[1,2], 'B':[3,4]}, index = [0,1])
df2 = pd.DataFrame({'B':[8,9], 'C':[10,11]}, index = [1,2])

我想合并,以便 df1 中的任何值在 df2 中有一个值被覆盖在该位置和 df2 中的任何新值添加了新的行和列。

结果应该是:

   A  B  C
0  1  3  nan
1  2  8  10
2 nan 9  11

我试过了 combine_first但这只会导致 nan 值被覆盖 updated 存在创建新行而不是覆盖新行的问题 合并有很多问题。

我试过写我自己的函数

def take_right(df1, df2, j, i):
    print (df1)
    print (df2)
    try:
        s1 = df1[j][i]
    except:
        s1 = np.NaN
    try:
        s2 = df2[j][i]
    except:
        s2 = np.NaN
    
    if math.isnan(s2):
        #print(s1)
        return s1
    else:
       # print(s2)
        return s2
    
def combine_df(df1, df2):
    
    rows = (set(df1.index.values.tolist()) | set(df2.index.values.tolist()))
    #print(rows)
    columns = (set(df1.columns.values.tolist()) | set(df2.columns.values.tolist()))
    #print(columns)
    df = pd.DataFrame()
    #df.columns = columns
    for i in rows:
        #df[:][i]=[]
        for j in columns:
                
                df = df.insert(int(i), j, take_right(df1,df2,j,i), allow_duplicates=False)
   # print(df)
                
    return df

这不会向空的 DataFrame 添加新的列或行。

谢谢!!

最佳答案

一种方法是使用 df1 和 df2 的列和索引的联合创建一个空输出数据帧,然后使用 df.update 方法将它们的值分配给 out_df

import pandas as pd

df1 = pd.DataFrame({'A':[1,2], 'B':[3,4]}, index = [0,1])
df2 = pd.DataFrame({'B':[8,9], 'C':[10,11]}, index = [1,2])


out_df = pd.DataFrame(
    columns = df1.columns.union(df2.columns),
    index = df1.index.union(df2.index),
)
out_df.update(df1)
out_df.update(df2)
out_df

enter image description here

关于python - 在python中合并df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72638155/

相关文章:

python - 如何在 Pandas 中获得连续滚动平均值?

python - 对来自 2 个数据帧 : Python Pandas 的匹配列执行数学运算

python - DataFrame - 值错误 : Unexpected tuple with StructType

python - 屏蔽二维数组替换值操作在 numpy 中不起作用

Python:不同的对象获得相同的id

python - 如何获取对 C api 函数的 python 调用者的引用

python - 如何根据给定值获取列的百分比

r - 通过匹配它们的列来合并具有不同大小的两个数据框

dataframe - 从 Spark 中的数据框列值中删除空格

python - 在 python 中创建 lambda 时,i=i 是什么意思?