我有一个如下所示的数据帧
import pandas as pd
df = pd.DataFrame(data={"ID":[11,12,13,14,25],\
"Name":["Alice","Bob","Charlie", "Dan", "Erin"], "X":[1,0,0,0,0]})
ID Name X
0 11 Alice 1
1 12 Bob 0
2 13 Charlie 0
3 14 Dan 0
4 25 Erin 0
我想选择X
为0的第一行,并将值更改为1
df[df["X"]==0]["X"].iloc[0] = 1
但这似乎根本没有修改数据帧df
。这对我来说很奇怪,因为我没有收到任何错误消息,而且删除=1
会产生错误
>>> df[df["X"]==0]["X"].iloc[0]
0
一如预期
我怀疑条件作用会创建数据帧的副本,因此数据帧df
根本就不会被修改
实现这一目标的最佳方式是什么
ID Name X
0 11 Alice 1
1 12 Bob 1
2 13 Charlie 0
3 14 Dan 0
4 25 Erin 0
当然,这需要系统地完成,因为我需要迭代这个过程
非常感谢你的帮助
我将使用
idxmax
对标量设置使用^{} /^{}
困难是因为您希望将位置行索引与基于标签的列索引混合使用。选择一个,并坚持它的行和列
您可以全程使用标签,类似于@Wen's solution,但通过
at
:或者您可以通过
iat
对整型位置进行索引:两种解决方案产生相同的结果。前者更有可读性
^{} /^{} 是矢量化的,但不是特别有效。如果效率是一个问题,请参见Efficiently return the index of the first value satisfying condition in array
相关问题 更多 >
编程相关推荐