2016-12-16 8 views
1

あるデータフレーム(df2)から別のデータフレーム(df1)にデータフレームのシリーズ('b')を書きたいと思います。両方のDataFramesは同じインデックス列を使用しますが、df2のインデックスの範囲は少し進んで、df1のインデックスの一部が欠落しています。データフレームのインデックスを増やす

これは、現在の動作です:私はdf1['b'] = df2['b']nanになってきていないdf2における指標のそれらの値とdf1に持ち越さ取得されていないdf1にない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 

結果のDataFrameが以下のようにこの動作を変更する方法はありますか?あなたが行くことができる

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

答えて

0

1つのオプションは、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のためのユースケースです。呼び出し側のデータフレームに優先順位を付け、不足している値を2番目の値で埋めます。また、最初のラベルにラベルが付いていない2番目のデータフレームの行を連結します。

df2.combine_first(df1) 
関連する問題