Lon*_*Rob 38 python dataframe pandas
对于这个问题,这是一个相当类似的问题,但有一个关键的区别:我选择的数据不是通过索引而是通过某些标准来改变.
如果我应用的条件返回单行,我希望能够以一种简单的方式设置该行中某列的值,但我的第一次尝试不起作用:
>>> 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
Run Code Online (Sandbox Code Playgroud)
因此,没有将2009年周日的香蕉销量设定为100,而是没有任何反应!最好的方法是什么?理想情况下,解决方案应使用行号,因为您通常不提前知道!
非常感谢,Rob
wai*_*kuo 55
许多方法都是这样做的
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
ram*_*ram 10
不确定旧版本的pandas,但在0.16中,可以根据多个列值设置特定单元格的值.
扩展@waitingkuo提供的答案,也可以根据多列的值完成相同的操作.
d.loc[(d.day== 'sun') & (d.flavour== 'banana') & (d.year== 2009),'sales'] = 100
Run Code Online (Sandbox Code Playgroud)
老问题,但我很惊讶没有人提到 numpy 的.where()功能(可以直接从 pandas 模块调用)。
在这种情况下,代码将是:
d.sales = pd.np.where(d.sales == 24, 100, d.sales)
Run Code Online (Sandbox Code Playgroud)
据我所知,这是有条件地更改一系列数据的最快方法之一。
| 归档时间: |
|
| 查看次数: |
57481 次 |
| 最近记录: |