这是一个与这个问题非常相似的问题,但有一个关键的区别:我选择的数据我想改变的不是它的索引,而是一些标准。
如果我应用的条件返回一行,我希望能够以一种简单的方式设置该行中某一列的值,但是我的第一次尝试不起作用:
>>> 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,还不如什么都不发生!做这件事最好的方法是什么?理想情况下,解决方案应该使用行号,因为您通常事先不知道!
老问题,但我很惊讶没有人提到numpy的.where()
功能(可以直接从pandas模块调用)。
在这种情况下,代码为:
d.sales = pd.np.where(d.sales == 24, 100, d.sales)
据我所知,这是跨系列有条件地更改数据的最快方法之一。
不确定旧版本的熊猫,但在0.16中,可以根据多个列值设置特定单元格的值。
扩展@waitingkuo提供的答案,同样的操作也可以基于多个列的值来完成。
d.loc[(d.day== 'sun') & (d.flavour== 'banana') & (d.year== 2009),'sales'] = 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
问题内容: 这是一个与该问题 “在pandas DataFrame中为特定单元格设置值”)非常相似的问题,但有一个主要区别:我选择的数据不是按其索引而是按某些条件进行更改。 如果我应用的条件返回一行,我希望能够以一种简单的方式设置该行中某个列的值,但是我的第一次尝试不起作用: 因此,与其将2009年周日的香蕉销量设置为100,没有任何反应!最好的方法是什么?理想情况下,解决方案应使用行号,因为您通
我想更改我的熊猫数据框架中的一个值,我想我误解了索引的工作方式。 我得到输出 我想将df中的值0.665873更改为1。我试过了 但我得到了错误 我试图用示例数据帧复制该问题,但无济于事。 我认为问题在于,当我使用实际数据时,我得到了一系列的输出,但当我使用实践数据时,得到了一个浮点。为什么我得到的是这个系列而不是浮点0.665873?
我已经根据这个遮阳篷尝试过这个 但这给了我警告: 我很难将此代码转换为使用 .loc 属性。有人可以告诉我如何将此代码转换为使用.loc并摆脱警告吗? 谢谢大家!
我有两个数据帧:df1和df2。df1有列['UserId'、'company'、'deg'],有100个观察值。df2有列['UserId','deg',],有10个观察值。df1和df2中的索引与“userId”完全匹配。 我想用df2中的更新df1。df2中的“UserId”列是df1中“UserId”列的子集……因此,没有任何附加内容。仅基于“userId”(和/或普通索引)。 df1 d
拿到这个了 然后我要为特定单元格赋值,例如为行“C”和列“X”赋值。我已经料到会有这样的结果: 使用此代码:
我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?