在具有固定索引的空数据框上合并几个数据框,合并列或附加这些数据框

时间:2019-06-07 09:35:25

标签: python pandas dataframe join

我有一个带范围索引的数据框,没有数据,在实际数据中,索引是一个时间范围。

例如

df_main = pd.DataFrame(index = pd.RangeIndex(0,15,1))

见图1

我有几个不同的列和索引的数据框,我只想基于索引将那些连接到主数据框上:

df1 = pd.DataFrame({'value': [1, 2, 3, 5]}, index = pd.RangeIndex(0,4,1))
df2 = pd.DataFrame({'value': [5, 6, 7, 8]}, index = pd.RangeIndex(4,8,1))
df3 = pd.DataFrame({'value2': [9, 8, 7, 6]}, index = pd.RangeIndex(0,4,1))
df4 = pd.DataFrame({'value': [1, 2],'value2': [3, 4],'value3': [5, 6]}, index = pd.RangeIndex(10,12,1))

请参见图2、3、4、5

我尝试了concat:

display(pd.concat([df_main,df1,df2,df3,df4]))

这给了我不必要的输出,如图6所示。

我还尝试了加入,导致出现我不明白的错误:

ValueError: Indexes have overlapping values: Index(['value', 'value2'], dtype='object')

我想要的是您可以在图7中看到的输出。

Figures

2 个答案:

答案 0 :(得分:2)

使用reduceDataFrame.combine_first

from functools import reduce
df = reduce((lambda x, y: x.combine_first(y)), [df_main,df1,df2,df3,df4])

print(df)

    value  value2  value3
0     1.0     9.0     NaN
1     2.0     8.0     NaN
2     3.0     7.0     NaN
3     5.0     6.0     NaN
4     5.0     NaN     NaN
5     6.0     NaN     NaN
6     7.0     NaN     NaN
7     8.0     NaN     NaN
8     NaN     NaN     NaN
9     NaN     NaN     NaN
10    1.0     3.0     5.0
11    2.0     4.0     6.0
12    NaN     NaN     NaN
13    NaN     NaN     NaN
14    NaN     NaN     NaN

答案 1 :(得分:2)

您可以groupby编制索引并与first进行汇总:

pd.concat([df_main, df1, df2, df3, df4]).groupby(level=0).first()

[出]

    value  value2  value3
0     1.0     9.0     NaN
1     2.0     8.0     NaN
2     3.0     7.0     NaN
3     5.0     6.0     NaN
4     5.0     NaN     NaN
5     6.0     NaN     NaN
6     7.0     NaN     NaN
7     8.0     NaN     NaN
8     NaN     NaN     NaN
9     NaN     NaN     NaN
10    1.0     3.0     5.0
11    2.0     4.0     6.0
12    NaN     NaN     NaN
13    NaN     NaN     NaN
14    NaN     NaN     NaN