2016-08-24 1 views
1

の更新データフレームに次の更新を達成するための方法を探して:が拡大して設定する - トランザクションDF

  • dfb、私はdft取引で更新する基本データフレームです。
  • 共通インデックス行は、dftの値で更新する必要があります。
  • dftのインデックスのみをdfbに追加する必要があります。

ドキュメントを見ると、拡大による設定は完璧に見えましたが、その後は1行でしか動作しないことに気付きました。この更新を行うために拡大を伴う設定を使用することは可能ですか、または推奨できる別の方法がありますか?あなたが最後astypeによってintfloat列を変換し、名前変更の列を持つcombine_firstを使用することができます

dfb = pd.DataFrame(data={'A': [11,22,33], 'B': [44,55,66]}, index=[1,2,3]) 
dfb 
Out[70]: 
    A B 
1 11 44 
2 22 55 
3 33 66 

dft = pd.DataFrame(data={'A': [0,2,3], 'B': [4,5,6]}, index=[3,4,5]) 
dft 
Out[71]: 
    A B 
3 0 4 
4 2 5 
5 3 6 

# Updated dfb should look like this: 
dfb 
Out[75]: 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6 

答えて

1

dft = dft.rename(columns={'c':'B', 'B':'A'}).combine_first(dfb).astype(int) 
print (dft) 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6 

Index.intersectionにより、両方のデータフレームで同じインデックスを見つけることのもう一つの解決策を、dropそれは最初DataFramedfbからとconcat

dft = dft.rename(columns={'c':'B', 'B':'A'}) 
idx = dfb.index.intersection(dft.index) 
print (idx) 
Int64Index([3], dtype='int64') 

dfb = dfb.drop(idx) 
print (dfb) 
    A B 
1 11 44 
2 22 55 

print (pd.concat([dfb, dft])) 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6 
関連する問題