用列表中的值替换df索引值但忽略空字符串

时间:2016-01-22 12:37:15

标签: python pandas indexing replace dataframe

我想用DF2替换DF1.index.values [some_column] .values HOWEVER我只想替换DF2 [some_column] .value不为null或空字符串。

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

这是不正确的,因为它取代了所有东西,而不是我想要的东西,我只对非空值或空值感兴趣。

1 个答案:

答案 0 :(得分: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)