当前位置: 首页 > 面试题库 >

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

薄腾
2023-03-14
问题内容

这是一个与该问题 “在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,没有任何反应!最好的方法是什么?理想情况下,解决方案应使用行号,因为您通常不事先知道!


问题答案:

有很多方法可以做到这一点

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


 类似资料:
  • 这是一个与这个问题非常相似的问题,但有一个关键的区别:我选择的数据我想改变的不是它的索引,而是一些标准。 如果我应用的条件返回一行,我希望能够以一种简单的方式设置该行中某一列的值,但是我的第一次尝试不起作用: 因此,与其将2009年周日的香蕉销量设定为100,还不如什么都不发生!做这件事最好的方法是什么?理想情况下,解决方案应该使用行号,因为您通常事先不知道!

  • 有没有一个函数可以在字符串的特定索引处替换一个字符串内的一个字符串一次?示例: 结果输出将是“我的文本是我的文本,你的大文本”

  • 本文向大家介绍Mysql中SQL语句不使用索引的情况,包括了Mysql中SQL语句不使用索引的情况的使用技巧和注意事项,需要的朋友参考一下 MySQL查询不使用索引汇总 众所周知,增加索引是提高查询速度的有效途径,但是很多时候,即使增加了索引,查询仍然不使用索引,这种情况严重影响性能,这里就简单总结几条MySQL不使用索引的情况 如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如,如果列

  • 我见过类似的问题,比如“如何在纯JavaScript中切换元素的类?”,但是这个问题引用了属性。 我有这样一个复选框: 我如何使它,以便当任何地方在(包括文本)被点击,它切换复选框属性?

  • 问题内容: 假设我有一个带有 的DataFrame : 我需要做的是用上方的同一列中NaN的第一个非NaN值替换每个值。假设第一行永远不会包含NaN。因此,对于前面的示例,结果将是 我可以遍历整个DataFrame的逐列,逐元素并直接设置值,但是是否有一种简单的方法(最佳无循环方法)来实现这一点? 问题答案: 你可以在上使用该方法,并将该方法指定为ffill(正向填充): 这个方法 将上一个有效观

  • 问题内容: 我创建了一个 并得到这个 然后,我想为特定的单元格赋值,例如行“ C”和列“ x”。我期望得到这样的结果: 使用此代码: 但内容df没有改变。再次仅在中。 有什么建议? 问题答案: RukTech的答案,远比我在下面建议的选项要快得多。但是,已将其淘汰。 展望未来,推荐的方法是。 为什么不起作用: 默认情况下,返回带有数据副本的新数据框,因此 仅修改此新数据框。 返回数据框的视图,因此