2016-10-17 25 views
0

我有一個dataframe有多個列。我想替換名爲Discriminant的列中的值。現在,只要在另一列ids中滿足條件時,此值就只需要替換爲幾行。我嘗試了各種方法;最常見的方法似乎是使用.loc方法,但由於某種原因,它不適用於我。替換行中子集的值

下面是我不成功嘗試變化:

encodedid - 用於條件覈對

indices變量 - 變量用於子集劃分的dataframe(從零開始)

變形例1:

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

變化2:

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

變化3:

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 

任何指針都會高度讚賞特德。

+0

什麼是指數?你能打印嗎?不知道你在努力達到什麼目的,還向我們展示了你的一小部分df –

回答

1

你切片太多了。嘗試這樣的:

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

.loc[]需要一個索引列表和列列表。您可以設置很容易地使用=「你需要什麼」

看到你的問題,你可能要設置2列的同時,使得片的值有:

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

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

這就像一個魅力。非常感謝。 – Patthebug

+1

同時爲2列添加了一個示例 –

+0

IMO'df.loc [(df.ids == encodedid),'Discriminant'] ='Y'(如果「encodedid」是一個標量值)或'df.loc [df.ids.isin(encodedid),'Discriminant'] ='Y''(如果「encodedid」是一個列表類似的)應該足夠了 – MaxU

1

也許像這個。我沒有數據框來測試它,但...

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