2016-07-19 5 views
1

を使用していくつかの値は、私は2個の行列の元を有し、今は第3列(COL3)から減算するsubstract値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)は、2つのテーブルの第2列が一致する行の参照テーブル(c)の値です。したがって、表2の最初の行は、表bの列がcol2である行が 'c'の列の値がcol3で10なので、第3列に値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 

、それはこのように見えるようにしたい:問題はCOL3ある

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

名を取りますと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 

次の方法を使用して、オリジナルでこれを保存することができます

関連する問題