添加列

时间:2015-05-12 09:53:17

标签: python-2.7 pandas

我使用的是Python 2.7.8 | Anaconda 2.1.0。我想知道为什么会发生以下奇怪的行为

我用两列创建一个pandas数据帧,然后通过对前两列求和来添加第三列

x = pd.DataFrame(np.random.randn(5, 2), columns = ['a', 'b'])
x['c'] = x[['a', 'b']].sum(axis = 1) #or x['c'] = x['a'] + x['b'] 
Out[7]: 
          a         b         c
0 -1.644246  0.851602 -0.792644
1 -0.129092  0.237140  0.108049
2  0.623160  0.105494  0.728654
3  0.737803 -1.612189 -0.874386
4  0.340671 -0.113334  0.227337

到目前为止一切顺利。现在我想将列c的值设置为零,如果它们是负的

x[x['c']<0] = 0
Out[9]: 
          a         b         c
0  0.000000  0.000000  0.000000
1 -0.129092  0.237140  0.108049
2  0.623160  0.105494  0.728654
3  0.000000  0.000000  0.000000
4  0.340671 -0.113334  0.227337

这会在'c'列中提供所需的结果,但由于某些原因,列'a''b'已被修改 - 我不希望这种情况发生。我想知道为什么会发生这种情况以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您必须指定只需要'c'列:

x.loc[x['c']<0, 'c'] = 0

当您使用布尔数组/系列进行索引时,这将选择完整行,如您在此示例中所示:

In [46]: x['c']<0
Out[46]:
0     True
1    False
2    False
3     True
4    False
Name: c, dtype: bool

In [47]: x[x['c']<0]
Out[47]:
          a         b         c
0 -0.444493 -0.592318 -1.036811
3 -1.363727 -1.572558 -2.936285

答案 1 :(得分:1)

因为您为所有列设置为零。您只应为列c

设置它
x['c'][x['c']<0] = 0