2016-12-16 41 views
1

我想寫一個數據幀從一個數據幀(df2)到另一個數據幀(df1)的一系列('b')。兩個數據框都使用相同的索引列,但df2的索引範圍稍微偏離一些,並且缺少一些df1的索引。Augment DataFrame index

這是當前的行爲:

>>> 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指數的值和df2不在df1沒有得到帶入df1指數。

有沒有什麼方法可以改變這種行爲,使得生成的DataFrame在下面?你可以去

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

回答

0

一種選擇是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 
2

這是一個用例combine_first。它將優先調用數據幀,並用第二個填充任何缺失值。它還會連接第二個數據框中第一個沒有標籤的行。

df2.combine_first(df1)