gpt4 book ai didi

python - 多索引系列上的 Pandas fillna

转载 作者:行者123 更新时间:2023-11-28 21:41:51 24 4
gpt4 key购买 nike

带有 NA 的 series_A 由一个 MultiIndex (X, Y) 索引,而要填写的值在 Series_B 中,它由 X 索引。如何有效解决此类问题?

例如,这里是series_A:

bar  one    0.299368
two NaN
baz one -0.863838
two -0.251905
foo one 1.063327
two NaN
qux one 0.206053
two 0.408204

series_B包含要填写的值:

bar  0.123
foo 0.456

最佳答案

方法一
使用 unstack 将第一级索引放入列中,然后使用 fillna

series_A.unstack(0).fillna(series_B).unstack().dropna()

bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64

方法二
使用 add 方法利用其 levelfill_value 参数,然后 combine_first

series_A.combine_first(series_A.add(series_B, level=0, fill_value=0))

bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64

方法三
对从 series_A.index.get_level_vaues(0) 返回的 Index 对象使用 map 和可调用的 series_B.get

series_A.fillna(
pd.Series(series_A.index.get_level_values(0).map(series_B.get), series_A.index)
)

bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64

方法四
使用 np.isnannp.flatnonzero 找到 np.nan 所在的位置。然后使用 get_level_valuesmap 找到要插入的值。最后,使用 iloc

放置到位
i = np.flatnonzero(np.isnan(series_A.values))
series_A.iloc[i] = series_A.index.get_level_values(0)[i].map(series_B.get)
series_A

bar one 0.299368
two 0.123000
baz one -0.863838
two -0.251905
foo one 1.063327
two 0.456000
qux one 0.206053
quz two 0.408204
dtype: float64

关于python - 多索引系列上的 Pandas fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com