Python 如何根据';属性';保留不匹配数组属性的数据帧行时的行数?
非常类似于“https://stackoverflow.com/questions/60566053/how-to-multiply-dataframe-rows-by-an-array-based-on-an-attribute-of-the-row但如果原始数据帧的索引行与数组的属性不匹配,df元素将返回NAN。实际上,我想要一个“左连接”变体实现 操作数数据帧df示例(日期作为A、B和C列的索引): df2: 正在尝试获取elementwise df*df2乘法数据帧结果:Python 如何根据';属性';保留不匹配数组属性的数据帧行时的行数?,python,pandas,dataframe,Python,Pandas,Dataframe,非常类似于“https://stackoverflow.com/questions/60566053/how-to-multiply-dataframe-rows-by-an-array-based-on-an-attribute-of-the-row但如果原始数据帧的索引行与数组的属性不匹配,df元素将返回NAN。实际上,我想要一个“左连接”变体实现 操作数数据帧df示例(日期作为A、B和C列的索引): df2: 正在尝试获取elementwise df*df2乘法数据帧结果:
A B C
2000-01-02 1 2 3
2000-01-03 1 4 9
2000-01-04 1 4 9
2000-01-05 1 2 3
但相反,你会得到
A B C
2000-01-02 NaN NaN NaN
2000-01-03 1 4 9
2000-01-04 1 4 9
2000-01-05 NaN NaN NaN
使用基于URL响应的解决方案,h/t jezrael
df_结果=(df.mul(df2,级别=0))
添加fill_value=作为参数在.mul()中无效
有人有什么建议吗?提前感谢您可以使用
update
更新df
。这将就地更新df
>>> df.update(df.mul(df2))
>>> df
A B C
2000-01-02 1.0 2.0 3.0
2000-01-03 1.0 4.0 9.0
2000-01-04 1.0 4.0 9.0
2000-01-05 1.0 2.0 3.0
对于非就地更新,您还可以使用fillna
方法用第一个df中的值填充空值:
>>> df.mul(df2).fillna(df)
A B C
2000-01-02 1.0 2.0 3.0
2000-01-03 1.0 4.0 9.0
2000-01-04 1.0 4.0 9.0
2000-01-05 1.0 2.0 3.0
试试看:
df1.mul(df2)。先组合(df1)
优雅、有效,而且效果很好。。
>>> df.update(df.mul(df2))
>>> df
A B C
2000-01-02 1.0 2.0 3.0
2000-01-03 1.0 4.0 9.0
2000-01-04 1.0 4.0 9.0
2000-01-05 1.0 2.0 3.0
>>> df.mul(df2).fillna(df)
A B C
2000-01-02 1.0 2.0 3.0
2000-01-03 1.0 4.0 9.0
2000-01-04 1.0 4.0 9.0
2000-01-05 1.0 2.0 3.0