这是一个与该问题 “在pandas DataFrame中为特定单元格设置值”)非常相似的问题,但有一个主要区别:我选择的数据不是按其索引而是按某些条件进行更改。
如果我应用的条件返回一行,我希望能够以一种简单的方式设置该行中某个列的值,但是我的第一次尝试不起作用:
>>> 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,没有任何反应!最好的方法是什么?理想情况下,解决方案应使用行号,因为您通常不事先知道!
有很多方法可以做到这一点
In [7]: d.sales[d.sales==24] = 100 In [8]: d Out[8]: 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 100 2009
In [26]: d.loc[d.sales == 12, 'sales'] = 99 In [27]: d Out[27]: day flavour sales year 0 sat strawberry 10 2008 1 sun strawberry 99 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 100 2009
In [28]: d.sales = d.sales.replace(23, 24) In [29]: d Out[29]: day flavour sales year 0 sat strawberry 10 2008 1 sun strawberry 99 2008 2 sat banana 22 2008 3 sun banana 24 2008 4 sat strawberry 11 2009 5 sun strawberry 13 2009 6 sat banana 24 2009 7 sun banana 100 2009