我正在尝试使用python制作大型数据框。我有很多带有不同行和列名称的小数据框,但是行名称和列名称之间有些重叠。我试图做的是从一个小的数据帧开始,然后一个接一个地添加其他数据帧。
每种特定的行-列组合都是唯一的,最后可能会有很多NA。
我曾尝试使用pandas的合并来做到这一点,但这会导致数据框比我需要的大得多,因为行和列的名称是重复的而不是合并的。如果我能找到让熊猫意识到NaN不是值并在添加新的小数据帧时覆盖它的方法,我想我会得到想要的结果。 我也愿意尝试一些不使用熊猫的东西。
For example:
DF1 A B
Y 1 2
Z 0 1
DF2 C D
X 1 2
Z 0 1
Merged: A B C D
Y 1 2 NA NA
Z 0 1 0 1
X NA NA 1 2
And then a new dataframe has to be added:
DF3 C E
Y 0 1
W 1 1
The result should be:
A B C D E
Y 1 2 0 NA 1
Z 0 1 0 1 NA
X NA NA 1 2 NA
W NA NA 1 NA 1
But what happens is:
A B C_x C_y D E
Y 1 2 NA 1 NA 1
Z 0 1 0 0 1 NA
X NA NA 1 1 2 NA
W NA NA 1 1 NA 1
答案 0 :(得分:1)
您要使用DataFrame.combine_first
,它将根据索引对齐DataFrame,并在左侧DataFrame中对值进行优先级排序,同时在右侧DataFrame中使用值来填充缺失值。
df1.combine_first(df2).combine_first(df3)
import pandas as pd
df1 = pd.DataFrame({'A': [1,0], 'B': [2,1]})
df1.index=['Y', 'Z']
df2 = pd.DataFrame({'C': [1,0], 'D': [2,1]})
df2.index=['X', 'Z']
df3 = pd.DataFrame({'C': [0,1], 'E': [1,1]})
df3.index=['Y', 'W']
df1.combine_first(df2).combine_first(df3)
A B C D E
W NaN NaN 1.0 NaN 1.0
X NaN NaN 1.0 2.0 NaN
Y 1.0 2.0 0.0 NaN 1.0
Z 0.0 1.0 0.0 1.0 NaN