У меня есть следующий DataFrame (df):
print(df.head())
Date Contract_Name Maturity ... Call_Put Option_Price t
0 2016-01-04 Aalberts Industries 2017-10-20 ... C 12.29 0.049315
1 2016-01-05 Aalberts Industries 2017-10-20 ... P 0.01 0.049315
2 2016-01-06 Aalberts Industries 2017-10-20 ... C 11.29 0.049315
3 2016-01-04 WOLTERS-KLUWER 2017-10-20 ... P 0.01 0.049315
4 2016-01-05 WOLTERS-KLUWER 2017-10-20 ... C 9.29 0.049315
И я хочу добавить столбец df ['s_t'], которому нужны данные из df_s_t, этот DataFrame выглядит следующим образом:
print(df_t_s.head())
Date Aalberts Industries ... UNILEVER WOLTERS-KLUWER
0 2016-01-04 30.125 ... 38.785 30.150
1 2016-01-05 30.095 ... 39.255 30.425
2 2016-01-06 29.405 ... 38.575 29.920
3 2016-01-07 29.005 ... 37.980 30.690
4 2016-01-08 28.930 ... 37.320 30.070
df ['Date'] можно сопоставить с df_s_t ['Date'], а df ['Contract_Name'] можно сопоставить с именами столбцов df_s_t.
Я надеюсь, что кто-нибудь поможет мне с созданием df ['s_t'] на основе значений из df_s_t (как описано выше).См. Также пример df ниже
print(df.head())
Date Contract_Name Maturity ... Call_Put Option_Price t s_t
0 2016-01-04 Aalberts Industries 2017-10-20 ... C 12.29 0.049315 30.125
1 2016-01-05 Aalberts Industries 2017-10-20 ... P 0.01 0.049315 30.095
2 2016-01-06 Aalberts Industries 2017-10-20 ... C 11.29 0.049315 29.405
3 2016-01-04 WOLTERS-KLUWER 2017-10-20 ... P 0.01 0.049315 30.150
4 2016-01-05 WOLTERS-KLUWER 2017-10-20 ... C 9.29 0.049315 30.425
Решение
df_s_t=pd.melt(df_s_t,id_vars=['Date'])
df_s_t=df_s_t.rename(columns={'variable':"Contract_Name"})
print(df_s_t.head())
Date Contract_Name value
0 2016-01-04 Aalberts Industries 30.125
1 2016-01-05 Aalberts Industries 30.095
2 2016-01-06 Aalberts Industries 29.405
3 2016-01-07 Aalberts Industries 29.005
4 2016-01-08 Aalberts Industries 28.93
Теперь мы можем использовать слияние:
df=pd.merge(df,df_s_t,on=['Date','Contract_Name'],how='left')
df=df.rename(columns={'value':'s_t'})
print(df.head())
Date Contract_Name Maturity ... Option_Price t s_t
0 2017-10-02 Aalberts Industries 2017-10-20 ... 12.29 0.049315 41.29
1 2017-10-02 Aalberts Industries 2017-10-20 ... 0.01 0.049315 41.29
2 2017-10-02 Aalberts Industries 2017-10-20 ... 11.29 0.049315 41.29
3 2017-10-02 Aalberts Industries 2017-10-20 ... 0.01 0.049315 41.29
4 2017-10-02 Aalberts Industries 2017-10-20 ... 9.29 0.049315 41.29