替换行的子集中的值

时间:2016-10-17 21:04:47

标签: python pandas dataframe

我有一个function blankTo0() { var ss=SpreadsheetApp.getActiveSpreadsheet() var s = ss.getActiveSheet() var rng = s.getRange("A:A");//change to column you want var data= rng.getValues() for (var i=0; i < data.length; i++) { if (data[i][0] == "") { data[i][0] = 0; } else if (data[i][0] == "") { data[i][0] = data[i][0]; }} rng.setValues(data); // replace old data with new } 有多列。我想替换名为dataframe的列中的值。现在,只要在另一个名为Discriminant的列中满足条件,就只需要替换几行。我试过各种方法;最常见的方法似乎是使用ids方法,但由于某种原因它对我不起作用。

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

.loc - 用于条件检查的变量

encodedid - 用于对indices进行子集化的变量(从零开始)

变体1:

dataframe

变体2:

df[df.ids == encodedid].loc[df.ids==encodedid, 'Discriminant'].values[indices] = 'Y'

变体3:

df[df['ids'] == encodedid].iloc[indices,:].set_value('questionid','Discriminant', 'Y')

df.loc[df.ids==encodedid, 'Discriminant'][indices] = 'Y' 特别令人失望的是,SO上的大多数帖子都倾向于说它应该有效,但它给了我以下错误:

Variation 3

任何指针都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

你正在切片太多了。尝试这样的事情:

indexer = df[df.ids == encodedid].index
df.loc[indexer, 'Discriminant'] = 'Y'

.loc[]需要索引列表和列列表。您可以使用=&#39;您需要的内容轻松设置该切片的价值&#39;

查看您的问题,您可能希望同时为2列设置:

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

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

答案 1 :(得分:1)

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

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