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
——它是一个列表还是一个标量值?同时为两列添加了一个示例imodf.loc[(df.ids==encodedid),'Discriminant'='Y'(如果“encodedid”是标量值)或df.loc[df.ids.isin(encodedid),'Discriminant'='Y'(如果“encodedid”类似于列表)应该是enough@Patthebug,您是否可以发布可复制的样本和所需的数据集(每个5行就足够了)?什么是encodedid
——是列表还是标量值?