gpt4 book ai didi

python - 在python中合并df

转载 作者:行者123 更新时间:2023-12-05 03:22:46 25 4
gpt4 key购买 nike

假设我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com