如何通过相等的索引和列名将空数据帧与另一个填充的数据帧合并/联接?



我想结合两个dataframes。一个dataframe,假设Empty_DF,是空的,并且具有大尺寸(320 列乘 240 行(,索引和列名只是整数。另一个,ROI_DF,较小且填充,并在某个位置匹配索引和列名。

我尝试使用此问题中建议的pandas.merge函数;但是,它只会将列附加到空dataframeEmpty_DF,而不会替换值。

Empty_DF = pd.DataFrame({'a':[0,0,0,0,0,0],
'b':[0,0,0,0,0,0], 'b':[0,0,0,0,0,0]}, index=list('abcdef'))
print (Empty_DF)
ROI_DF= pd.DataFrame({'a':range(4),
'b':[5,6,7,8]}, index=list('abce'))
print(ROI_DF)
a  b  c
a  0  0  0
b  0  0  0
c  0  0  0
d  0  0  0
e  0  0  0
f  0  0  0

在此示例中,这已经足够了,因为dataframe很小,并且可以使用带有 pandas.drop 的pandas.fillna选项。有没有更有效的方法将其优化为更大的dataframes

df3 = pd.merge(Empty_DF, ROI_DF, how='left', left_index=True, 
right_index=True, suffixes=('_x', ''))
df3['a'].fillna(df3['a_x'], inplace=True)
df3['b'].fillna(df3['b_x'], inplace=True)
df3.drop(['a_x', 'b_x'], axis=1, inplace=True)
print(df3)
a  b c
a  0  5 0
b  1  6 0
c  2  7 0
d  0  0 0
e  3  8 0
f  0  0 0

这是DataFrame.update的完美情况,它在索引上对齐

Empty_DF.update(ROI_DF)

输出

print(df3)
a    b  c
a  0.0  5.0  0
b  1.0  6.0  0
c  2.0  7.0  0
d  0.0  0.0  0
e  3.0  8.0  0
f  0.0  0.0  0

请注意,update已到位,如文档引用的那样:

使用另一个数据帧中的非 NA 值就地修改。

这意味着原始数据帧将按新值进行更新。要防止这种情况,请使用:

df3 = Empty_DF.copy()
df3.update(ROI_DF)

您可以使用update

Empty_DF.update(ROI_DF)

输出:

a    b  c
a  0.0  5.0  0
b  1.0  6.0  0
c  2.0  7.0  0
d  0.0  0.0  0
e  3.0  8.0  0
f  0.0  0.0  0

loc

Empty_DF.loc[ROI_DF.index, ROI_DF.columns] = ROI_DF

输出:

a  b  c
a  0  5  0
b  1  6  0
c  2  7  0
d  0  0  0
e  3  8  0
f  0  0  0

在您的情况下reindex_like

yourdf=ROI_DF.reindex_like(Empty_DF).fillna(0)
a    b    c
a  0.0  5.0  0.0
b  1.0  6.0  0.0
c  2.0  7.0  0.0
d  0.0  0.0  0.0
e  3.0  8.0  0.0
f  0.0  0.0  0.0

最新更新