2015-04-02 192 views
0

假設我有這樣的事情(可能有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 
.... 

我如果它們的索引匹配,則希望將df1行值與df2行值相乘。什麼是在熊貓身上做這件事的優雅方式?這可能很容易,我只是忽略它。

謝謝。

回答

0

您可以使用數組來存儲值。然後查看arrayA是否在arrayB中出現相同的值。如果是的話,做一個計算。

1

如果將指數是兩個DF的乘法,然後將調整在指數匹配日期:

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 

的上面假設日期列尚未設置爲索引。

+0

我得到「ValueError異常:不能重複軸重新索引」,是因爲某些指標是重複的。 – jenny 2015-04-02 21:08:10

+0

如果您有重複的日期,那麼這些值也是重複的?另一種方法是在日期上將df1的值列合併到df,然後再乘以2列 – EdChum 2015-04-02 21:10:10

0

你可以使用

df1.multiply(df2) 

檢查pandas.DataFrame.multiply

相關問題