2016-01-22 61 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)