python - 在不使用索引的情况下替换 pandas DataFrame 中选定单元格的值

标签 python pandas dataframe

这是一个与 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

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

2

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

3

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

关于python - 在不使用索引的情况下替换 pandas DataFrame 中选定单元格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17729853/

相关文章:

python - 如何在值符号更改后重置 cumsum?

python - 使用 Pandas 写入特定范围/列

python-3.x - Pandas 将 groupby 之后的值计数扩展为列

r - 用上面行中的值填写数据框

python - 在 Pandas 数据框中替换大于 1 的值

python - 忽略索引的两个数据帧的快速减法(Python)

Python + Linux : How to determine cron job is scheduled?

python - gstreamer 动态管道文件接收器添加,出现未协商错误

python - 创建笛卡尔积的最快方法,对内没有重复元素

python - 如何有效地将多个列添加到 pandas 数据框中,其值依赖于其他动态列