繁体   English   中英

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

[英]replace df index values with values from a list but ignore empty strings

我想用DF2 [some_column] .values替换DF1.index.values,但是我只想替换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

这是不正确的,因为它替换了所有内容,那不是我想要的,我只对非null或空值感兴趣。

您可以where根据条件从到来源中选择值:

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

因此,如果DF2[some_column]!="" ,它将使用DF2[some_column]值(实际上,我们在这里创建了一个用作布尔索引的Series,表示要为每个原始数据选择什么数据),在其他情况下,它将使用DF2.index值。

由于您也不想使用nan值,因此需要pd.notnull函数。 并检查这两个条件中使用“逻辑和”功能在两个系列是对数值&

所以最终的代码是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM