2016-01-22 62 views
0

我想用DF2 [some_column] .values替換DF1.index.values但是如果DF2 [some_column] .value不爲空或空值,我只想替換串。用列表中的值替換df索引值,但忽略空字符串

DF1.index.values 

Index(['a','b','c','d']), dtype='object') 

DF2[some_column].values 

['base','','','net 1'] 

預計輸出

Index(['base','b','c','net 1']), dtype='object') 

我嘗試:

DF1.index = DF2[some_column].values 

這是不正確,因爲它取代一切,那不是我想要的,我只是在不爲空或空值感興趣。

+0

呢'DF2 [some_column] .replace( '',DF1.index)'工作? – EdChum

+0

謝謝EdChum,但它不會完成我打算做的事情。 –

回答

1

您可以通過條件使用where選擇值從消息人士稱:

DF1.index = DF2[some_column].where(DF2[some_column]!="", DF2.index) 

所以如果DF2[some_column]!=""(其實這裏我們創造它用作布爾指數在說什麼數據系列將使用DF2[some_column]值爲每個原料選擇),在另一種情況下,它將使用DF2.index值。

由於您不想要nan值,您還需要pd.notnull函數。要檢查兩個條件,請使用「邏輯」和「函數」兩個系列中的值對,即&

所以最終的代碼是

DF1.index = DF2[some_column].where(
      (DF2[some_column]!="") & pd.notnull(DF2[some_column]), DF2.index)