增加DataFrame索引

2024-05-17 14:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个数据帧(df2)到另一个数据帧(df1),编写一系列('b')。两个数据帧使用相同的索引列,但是df2的索引范围更大,并且缺少{}的一些索引。在

这是当前的行为:

>>> 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。在

下面的数据行为有什么变化吗?在

^{pr2}$

Tags: 数据importdataframepandasdfindexasnan
2条回答

可以使用的一个选项是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

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

df2.combine_first(df1)

相关问题 更多 >