假设我有类似的东西(可能重复了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行值加倍。在熊猫中这样做的优雅方式是什么?这可能很容易,我只是忽略它。
感谢。
答案 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