我想用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
这是不正确的,因为它取代了所有东西,而不是我想要的东西,我只对非空值或空值感兴趣。
答案 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)