2016-07-19 3 views
1

나는 두 행렬 원래 가지고 I 원래 테이블의 세 번째 열 (COL3)로부터 감산 할 지금빼기 값 datafram 다른 열이 어떤 값을 이용 팬더 일치하면

import pandas as pa 
print "Original Data Frame" 
# Create a dataframe 
oldcols = {'col1':['a','a','b','b'], 'col2':['c','d','c','d'], 'col3':[1,2,3,4]} 
a = pa.DataFrame(oldcols) 
print "Original Table:" 
print a 

print "Reference Table:" 
b = pa.DataFrame({'col1':['x','x'], 'col2':['c','d'], 'col3':[10,20]}) 
print b 

참조 말할 (a)는 두 테이블의 두 번째 열이 일치하는 행의 참조 테이블 (c)에있는 값입니다. 따라서 표 2의 첫 번째 행은 세 번째 열에 값 10이 추가되어야합니다. 표 b의 열이 col2 인 행은 'c'의 열의 값이 col3이므로 10입니다. 이해가 되니?

col3 = [] 
for ix, row in a.iterrows(): 
    col3 += [row[2] + b[b['col2'] == row[1]]['col3']] 

a['col3'] = col3 
print "Output Table:" 
print a 

하고 같이 만들고 싶어 :

Output Table: 
    col1 col2 col3 
0 a c 11 
1 a d 22 
2 b c 13 
3 b d 24 

문제가 COL3입니다 이름 걸립니다 : 여기에 있다는 것은 않습니다 일부 코드는 배열과 DTYPE

>>print col3 
[0 11 
Name: col3, dtype: int64, 1 22 
Name: col3, dtype: int64, 0 13 
Name: col3, dtype: int64, 1 24 
Name: col3, dtype: int64] 

수 너 도와 줘?

답변

3

이 작동합니다 :

a['col3'] + a['col2'].map(b.set_index('col2')['col3']) 
Out[94]: 
0 11 
1 22 
2 13 
3 24 
dtype: int64 

또는이 :

a['col3'] = a.merge(b, on='col2', how='left')[['col3_x', 'col3_y']].sum(axis=1) 
: 요청에 따라

a.merge(b, on='col2', how='left')[['col3_x', 'col3_y']].sum(axis=1) 
Out[110]: 
0 11 
1 22 
2 13 
3 24 
dtype: int64 

당신은을 통해, 원래이를 저장할 수 있습니다

관련 문제