2016-08-24 2 views
1

는 dataframe에 다음과 같은 업데이트를 달성하기 위해 :설정 - 방법을 찾고 업데이트 거래 DF

  • dfb 내가 dft 트랜잭션을 업데이트 할 기본 dataframe입니다.
  • 일반적인 색인 행은 dft의 값으로 업데이트해야합니다.
  • dft의 색인은 dfb에 덧붙여 야합니다.

문서를 보면, 확대 된 설정은 완벽하게 보였지만 한 줄로 만 작동한다는 것을 깨달았습니다. 이 업데이트를하기 위해 확대 된 설정을 사용할 수 있습니까? 아니면 권장 할 수있는 다른 방법이 있습니까?

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

당신은 마지막 astype에 의해 intfloat 열을 변환, 이름 바꾸기 열이 combine_first를 사용할 수 있습니다

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에 의해 모두 DataFrames에 같은 인덱스를 찾는, 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