Concat关于缺失索引的两个DataFrame

时间:2017-02-20 12:42:40

标签: python pandas

我有两个DataFrame,并且只想在第一个没有包含索引的行中使用第二个。

最有效的方法是什么?

示例:

df_1
idx     val
0      0.32
1      0.54
4      0.26
5      0.76
7      0.23

df_2
idx     val
1     10.24
2     10.90
3     10.66
4     10.25
6     10.13
7     10.52

df_final
idx     val
0      0.32
1      0.54
2     10.90
3     10.66
4      0.26
5      0.76
6     10.13
7      0.23

回顾:我需要在df_2中添加索引尚未包含在df_1中的行。

修改

删除了df_2中的一些索引,以说明df_1中未涵盖df_2的所有索引。

2 个答案:

答案 0 :(得分:3)

您可以将reindexcombine_firstfillna

一起使用
df = df_1.reindex(df_2.index).combine_first(df_2)
print (df)
       val
idx       
0     0.32
1     0.54
2    10.90
3    10.66
4     0.26
5     0.76
6    10.13
7     0.23
df = df_1.reindex(df_2.index).fillna(df_2)
print (df)
       val
idx       
0     0.32
1     0.54
2    10.90
3    10.66
4     0.26
5     0.76
6    10.13
7     0.23

答案 1 :(得分:2)

您可以使用DataFrame的combine_first方法来实现所需的输出。从方法的文档:

  

将两个DataFrame对象组合在一起,默认为调用该方法的帧中的非空值。结果索引列将是相应索引和列的并集

使用示例:

import pandas as pd

df_1 = pd.DataFrame([0.32,0.54,0.26,0.76,0.23], columns=['val'], index=[0,1,4,5,7])
df_1.index.name = 'idx'

df_2 = pd.DataFrame([10.56,10.24,10.90,10.66,10.25,10.13,10.52], columns=['val'], index=[0,1,2,3,4,6,7])
df_2.index.name = 'idx'

df_final = df_1.combine_first(df_2)

这将得到所需的结果:

In [7]: df_final
Out[7]:
       val
idx       
0     0.32
1     0.54
2    10.90
3    10.66
4     0.26
5     0.76
6    10.13
7     0.23