Python 如何根据';属性';保留不匹配数组属性的数据帧行时的行数?

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乘法数据帧结果:

非常类似于“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