我有两个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
的所有索引。
答案 0 :(得分:3)
您可以将reindex
与combine_first
或fillna
:
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