Python 为行子集替换列中的值

Python 为行子集替换列中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个具有多个列的dataframe。我想替换名为Discriminant的列中的值。现在,只要在另一个名为ids的列中满足一个条件,就只需要为几行替换该值。我尝试了各种方法;最常用的方法似乎是使用.loc方法,但由于某些原因,它对我不起作用 以下是我尝试失败的变体: encodedid-用于条件检查的变量 索引-用于对数据帧进行子集设置的变量(从零开始) 变体1: df[df.ids == encodedid].loc[df.ids==encodedid, 'Discriminant'].v

我有一个具有多个列的
dataframe
。我想替换名为
Discriminant
的列中的值。现在,只要在另一个名为
ids
的列中满足一个条件,就只需要为几行替换该值。我尝试了各种方法;最常用的方法似乎是使用
.loc
方法,但由于某些原因,它对我不起作用

以下是我尝试失败的变体:

encodedid
-用于条件检查的变量

索引
-用于对
数据帧
进行子集设置的变量(从零开始)

变体1:

df[df.ids == encodedid].loc[df.ids==encodedid, 'Discriminant'].values[indices] = 'Y'
df[df['ids'] == encodedid].iloc[indices,:].set_value('questionid','Discriminant', 'Y')
df.loc[df.ids==encodedid, 'Discriminant'][indices] = 'Y'
变体2:

df[df.ids == encodedid].loc[df.ids==encodedid, 'Discriminant'].values[indices] = 'Y'
df[df['ids'] == encodedid].iloc[indices,:].set_value('questionid','Discriminant', 'Y')
df.loc[df.ids==encodedid, 'Discriminant'][indices] = 'Y'
变体3:

df[df.ids == encodedid].loc[df.ids==encodedid, 'Discriminant'].values[indices] = 'Y'
df[df['ids'] == encodedid].iloc[indices,:].set_value('questionid','Discriminant', 'Y')
df.loc[df.ids==encodedid, 'Discriminant'][indices] = 'Y'
Variation 3
尤其令人失望,因为SO上的大多数帖子倾向于说它应该可以工作,但它给了我以下错误:

ValueError: [ 0  1  2  3  5  6  7  8 10 11 12 13 14 16 17 18 19 20 21 22 23] not contained in the index

任何提示都将受到高度赞赏。

您切得太多了。试着这样做:

indexer = df[df.ids == encodedid].index
df.loc[indexer, 'Discriminant'] = 'Y'
.loc[]
需要索引列表和列列表。您可以使用
=
“what you needed”轻松设置该切片的值

考虑到您的问题,您可能希望同时为2列设置,例如:

indexer = df[df.ids == encodedid].index
column_list = ['Discriminant', 'questionid']

df.loc[indexer, column_list] = 'Y'

你切得太多了。试着这样做:

indexer = df[df.ids == encodedid].index
df.loc[indexer, 'Discriminant'] = 'Y'
.loc[]
需要索引列表和列列表。您可以使用
=
“what you needed”轻松设置该切片的值

考虑到您的问题,您可能希望同时为2列设置,例如:

indexer = df[df.ids == encodedid].index
column_list = ['Discriminant', 'questionid']

df.loc[indexer, column_list] = 'Y'

也许是这样的。我没有数据帧来测试它,但是

df['Discriminant'] = np.where(df['ids'] == 'some_condition', 'replace', df['Discriminant'])

也许是这样的。我没有数据帧来测试它,但是

df['Discriminant'] = np.where(df['ids'] == 'some_condition', 'replace', df['Discriminant'])

什么是指数?你能把它打印出来吗?不知道你想做什么,也给我们看一小张你的照片,什么是索引?你能把它打印出来吗?不确定您想要实现什么,还向我们展示了您的一小部分df同时为两列添加了一个示例IMO
df.loc[(df.ids==encodedid),'Discriminant']='Y'(如果“encodedid”是标量值)或
df.loc[df.ids.isin(encodedid),'Discriminant']='Y'(如果“encodedid”是类似列表)应该是enough@Patthebug,您是否可以发布可复制的样本和所需的数据集(每个5行就足够了)?什么是
encodedid
——它是一个列表还是一个标量值?同时为两列添加了一个示例imo
df.loc[(df.ids==encodedid),'Discriminant'='Y'(如果“encodedid”是标量值)或
df.loc[df.ids.isin(encodedid),'Discriminant'='Y'(如果“encodedid”类似于列表)应该是enough@Patthebug,您是否可以发布可复制的样本和所需的数据集(每个5行就足够了)?什么是
encodedid
——是列表还是标量值?