如果数据框中的另一列使用 pandas 匹配某个值,则从数据框中的列中减去值
substract values from column in dataframe if another column in dataframe matches some value using pandas
假设我有两个矩阵原件和参考
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
现在我想从原始table(a)的第三列(col3)中减去引用table(c)中第二列所在行的值两个 table 匹配。所以 table two 的第一行应该将值 10 添加到第三列,因为列为 col2 的 table b 的行是 '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 在数组中采用 Name: 和 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]
你能帮忙吗?
这应该有效:
a['col3'] + a['col2'].map(b.set_index('col2')['col3'])
Out[94]:
0 11
1 22
2 13
3 24
dtype: int64
或者这样:
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
您可以按照要求将其存储在原件中,方法是:
a['col3'] = a.merge(b, on='col2', how='left')[['col3_x', 'col3_y']].sum(axis=1)
假设我有两个矩阵原件和参考
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
现在我想从原始table(a)的第三列(col3)中减去引用table(c)中第二列所在行的值两个 table 匹配。所以 table two 的第一行应该将值 10 添加到第三列,因为列为 col2 的 table b 的行是 '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 在数组中采用 Name: 和 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]
你能帮忙吗?
这应该有效:
a['col3'] + a['col2'].map(b.set_index('col2')['col3'])
Out[94]:
0 11
1 22
2 13
3 24
dtype: int64
或者这样:
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
您可以按照要求将其存储在原件中,方法是:
a['col3'] = a.merge(b, on='col2', how='left')[['col3_x', 'col3_y']].sum(axis=1)