pandas 扩充DataFrame索引

uinbv5nw  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(119)

我想从一个 Dataframe (df2)到另一个 Dataframe (df1)写入一系列 Dataframe ('b')。两个 Dataframe 使用相同的索引列,但df2的索引范围有点远,它缺少df1的一些索引。
这是当前的行为:

>>> import pandas as pd
>>> pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
   a  b
0  1  4
1  2  5
2  3  6
>>> 
>>> df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> df1 = df.set_index(['a'])
>>> df1
   b
a   
1  4
2  5
3  6
>>> dg = pd.DataFrame({'a': [3, 4, 5], 'b': [7, 8, 9]})
>>> dg
   a  b
0  3  7
1  4  8
2  5  9
>>> df2 = dg.set_index('a')
>>> df2
   b
a   
3  7
4  8
5  9
>>> df1['b'] = df2['b']
>>> df1
     b
a     
1  NaN
2  NaN
3  7.0

当我调用df1['b'] = df2['b']时,不在df2中的那些索引值将变成nan,而不在df1中的df2的索引将不会结转到df1中。
有没有什么方法可以改变这种行为,使结果DataFrame如下所示?

>>> df1
     b
a     
1  1
2  2
3  7
4  8
5  9
ogq8wdun

ogq8wdun1#

这是combine_first的一个用例。它将对调用 Dataframe 进行优先级排序,并使用第二个 Dataframe 填充任何缺失的值。它还将连接第二个 Dataframe 中没有标签的行。

df2.combine_first(df1)
qeeaahzv

qeeaahzv2#

你可以选择reindex() df2,然后用df1填充缺失的值:

df2 = df2.reindex(df1.index.union(df2.index))    
df2['b'] = df2['b'].fillna(df1['b'])

df2
#     b
#a  
#1  4.0
#2  5.0
#3  7.0
#4  8.0
#5  9.0

相关问题