Python 根据条件修改数据帧的第一行

Python 根据条件修改数据帧的第一行,python,pandas,indexing,series,Python,Pandas,Indexing,Series,我有一个如下所示的数据框架 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

我有一个如下所示的数据框架

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

df.loc[df.X.eq(0).idxmax(),'X']=1
df
Out[153]: 
   ID     Name  X
0  11    Alice  1
1  12      Bob  1
2  13  Charlie  0
3  14      Dan  0
4  25     Erin  0
使用/进行标量设置 出现困难是因为您希望将位置行索引与基于标签的列索引混合使用。选择一个,并在行和列中使用它

您可以在整个过程中使用标签,类似于但通过

df.at[df['X'].eq(0).idxmax(), 'X'] = 1
df.iat[df['X'].eq(0).values.argmax(), df.columns.get_loc('X')] = 1
或者,您可以通过
iat
对整型位置索引进行索引:

df.at[df['X'].eq(0).idxmax(), 'X'] = 1
df.iat[df['X'].eq(0).values.argmax(), df.columns.get_loc('X')] = 1
两种解决方案产生相同的结果。前者可能更具可读性

print(df)

   ID     Name  X
0  11    Alice  1
1  12      Bob  1
2  13  Charlie  0
3  14      Dan  0
4  25     Erin  0

/是矢量化的,但不是特别有效。如果效率是一个问题,请参见。

与我将要发布的内容非常相似:
df.loc[df['X'].ne(1.idxmax(),'X']=1