我有一个熊猫DataFrame,其中包含如下所示的股票:
Name Ticker Currency
0 TOTAL SA FP FP EUR
1 APPLE INC AAPL US USD
2 ALPHABET INC-CL A GOOGL US USD
我还有另一个包含价格的东西:
AAPL US FP FP GOOGL US
Date
2018-08-01 200.0000 55.0000 1235.0000
2018-08-02 201.0000 56.0000 1236.0000
2018-08-03 202.0000 57.0000 1237.0000
和另一个包含FX的
EUR USD
Date
2018-08-01 1.1300 1.3000
2018-08-02 1.1400 1.3100
2018-08-03 1.1500 1.3200
我想创建一个新的DataFrame,其列与包含FX汇率的价格相同。我想通过使用股票DataFrame的货币列作为查找并从FX DataFrame中选择正确的值来做到这一点,所以我得到这样的东西:
AAPL US FP FP GOOGL US
Date
2018-08-01 1.3000 1.1300 1.3000
2018-08-02 1.3100 1.1400 1.3100
2018-08-03 1.3200 1.1500 1.3200
我似乎找不到合适的功能来执行此操作。
答案 0 :(得分:1)
final_df = df_prices.copy()
cols = final_df.columns
final_df.columns = final_df.columns.map(df_stocks[['Ticker', 'Currency']].set_index('Ticker').to_dict()['Currency'])
final_df.update(df_fx)
final_df.columns = cols
输出
>>> print(final_df)
AAPL US FP FP GOOGL US
Date
2018-08-01 1.30 1.13 1.30
2018-08-02 1.31 1.14 1.31
2018-08-03 1.32 1.15 1.32
答案 1 :(得分:1)
假设您从3个数据帧开始:stocks
,prices
和fx
。然后,您可以将pd.DataFrame.loc
与序列映射一起使用:-
# create mapping from ticker to currency
s = stocks.set_index('Ticker')['Currency']
# reindex fx with data from prices, then rename columns
res = fx.loc[prices.index, prices.columns.map(s)]\
.set_axis(prices.columns, axis=1, inplace=False)
print(res)
AAPL US FP FP GOOGL US
2018-08-01 1.30 1.13 1.30
2018-08-02 1.31 1.14 1.31
2018-08-03 1.32 1.15 1.32