如果两个数据帧沿相应的行具有相同的索引值,如何将它们相乘?

时间:2015-04-02 20:44:17

标签: python pandas dataframe

假设我有类似的东西(可能重复了forecast_date索引):

df1: 
forecast_date    value

2015-04-11       18952
2015-04-12       18938
2015-04-13       18940
2015-04-14       18949
2015-04-15       18955
2015-04-16       18956
...
2015-04-02       18950
2015-04-03       18968

我还有另一个类似这样的数据框(这里的索引永远不会重复):

df2:
date           value
2015-04-01     1.3
2015-04-02     1.35
2015-04-03     1.34
2015-04-04     1.45
....

如果df2行值匹配,我希望将df1行值加倍。在熊猫中这样做的优雅方式是什么?这可能很容易,我只是忽略它。

感谢。

3 个答案:

答案 0 :(得分:1)

如果您将索引设置为两个df' s的日期,则乘法将对齐索引匹配的位置:

In [46]:

df['value'] * df1['value']
Out[46]:
2015-04-01         NaN
2015-04-02    25582.50
2015-04-03    25417.12
2015-04-04         NaN
2015-04-11         NaN
2015-04-12         NaN
2015-04-13         NaN
2015-04-14         NaN
2015-04-15         NaN
2015-04-16         NaN
Name: value, dtype: float64

问题是您是否需要NaN值缺少行的位置。

修改

如果你有重复的日期值,那么你可以做的就是合并另一个df的值列,然后乘以2列,这样下面的代码就可以了:

In [58]:

df1.rename(columns={'value':'other_value'}, inplace=True)
merged = df.merge(df1, left_on='forecast_date', right_on='date', how='left')
merged['new_value'] = merged['value'] * merged['other_value']
merged
Out[58]:
  forecast_date  value        date  other_value  new_value
0    2015-04-11  18952         NaN          NaN        NaN
1    2015-04-12  18938         NaN          NaN        NaN
2    2015-04-13  18940         NaN          NaN        NaN
3    2015-04-14  18949         NaN          NaN        NaN
4    2015-04-15  18955         NaN          NaN        NaN
5    2015-04-16  18956         NaN          NaN        NaN
6    2015-04-02  18950  2015-04-02         1.35   25582.50
7    2015-04-03  18968  2015-04-03         1.34   25417.12

以上假设日期列尚未设置为索引。

答案 1 :(得分:0)

您可以使用数组来存储值。然后查看arrayA,如果arrayB中出现相同的值。如果是,请进行计算。

答案 2 :(得分:0)

你可以使用

df1.multiply(df2)

检查pandas.DataFrame.multiply