【发布时间】:2017-05-17 18:29:09
【问题描述】:
pandas.DataFrame.multiply() 的 fill_value 参数填充 both 数据帧中的缺失值。但是,我只想在第二个 DataFrame 中填充缺失值。除了我下面的 hacky 解决方案之外,还有什么好方法?
>>> df1 = pd.DataFrame({'a':[1, np.nan, 2], 'b':[np.nan, 3, 4]}, index = [1, 2, 3])
>>> df1
a b
1 1.0 NaN
2 NaN 3.0
3 2.0 4.0
>>> df2 = pd.DataFrame({'a':[2, np.nan], 'b':[3, np.nan], 'c':[1, 1]}, index = [1, 2])
>>> df2
a b c
1 2.0 3.0 1.0
2 NaN NaN 1.0
我想将两个 DataFrames 元素相乘,将df1 保持为主要元素,以便生成的形状和NaN 条目应匹配df1,同时在NaNs 中填充df2按值1,得到
a b
1 2.0 NaN
2 NaN 3.0
3 2.0 4.0
天真的解决方案不起作用:
>>> df1.multiply(df2, fill_value=1)
a b c
1 2.0 3.0 1.0
2 NaN 3.0 1.0
3 2.0 4.0 NaN
我的解决方案是用1s 创建一个矩阵,其中df1 具有价值,并由df2 更新
>>> df3 = df1/df1
>>> df3.update(df2)
>>> df3
a b
1 2.0 3.0
2 NaN 1.0
3 1.0 1.0
>>> df1.multiply(df3)
a b
1 2.0 NaN
2 NaN 3.0
3 2.0 4.0
感觉不是很优雅。关于使用df1 和df2 直接操作的任何好主意,希望是单行的?
【问题讨论】:
标签: pandas dataframe multiplication