我有一个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
任何指针都将受到高度赞赏。
答案 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'])