这是一个与this question非常相似的问题,但有一个关键的区别:我选择的数据不是要根据其索引,而是要根据某些条件进行更改。
如果我应用的条件返回一行,我希望能够以简单的方式设置该行中某列的值,但我的第一次尝试失败:
>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009],
... 'flavour':['strawberry','strawberry','banana','banana',
... 'strawberry','strawberry','banana','banana'],
... 'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
... 'sales':[10,12,22,23,11,13,23,24]})
>>> d
day flavour sales year
0 sat strawberry 10 2008
1 sun strawberry 12 2008
2 sat banana 22 2008
3 sun banana 23 2008
4 sat strawberry 11 2009
5 sun strawberry 13 2009
6 sat banana 23 2009
7 sun banana 24 2009
>>> d[d.sales==24]
day flavour sales year
7 sun banana 24 2009
>>> d[d.sales==24].sales = 100
>>> d
day flavour sales year
0 sat strawberry 10 2008
1 sun strawberry 12 2008
2 sat banana 22 2008
3 sun banana 23 2008
4 sat strawberry 11 2009
5 sun strawberry 13 2009
6 sat banana 23 2009
7 sun banana 24 2009
所以,与其将2009年周日香蕉的销量定为100只,还不如什么都不做!做这个最好的方法是什么?理想情况下,解决方案应该使用行号,因为您通常事先不知道!
有很多方法可以做到
1
2
3
不确定旧版本的pandas,但在0.16中,可以基于多个列值设置特定单元格的值。
扩展@waitingkuo提供的答案,也可以基于多个列的值执行相同的操作。
老问题了,但是我很惊讶没有人提到numpy的
.where()
功能(可以直接从pandas模块调用)。在这种情况下,代码是:
据我所知,这是在一个系列中有条件地更改数据的最快方法之一。
相关问题 更多 >
编程相关推荐