这是一个与此问题非常相似的问题,但有一个关键区别:我选择要更改的数据不是通过其索引而是通过一些条件。
如果我应用的条件返回单行数据,则我希望能够以简单的方式设置该行中某个列的值,但我的第一次尝试并没有成功:
>>> 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,不如什么都不做!最好的解决方案是使用行号,因为通常事先不知道行号!
d.sales[d.sales==24] = 100
是可行的,但d[d.sales==24].sales=100
却不行。在我看来,它们(在功能上)看起来是相同的。啊,算了。感谢@waitingkuo。 - LondonRobd[d.sales==24]
生成原始DataFrame
的副本显然不直观。实际上,我认为每个对象都应该是对原始对象的引用(包括选择单个行,正确地“折叠”为PandasSeries
),除非用户通过某种方式明确请求(通过copy=True
)。你有什么想法? - LondonRobd.sales
的方法?我更喜欢不使用这种语法,因为有时列名中有空格。 - cryanbhu