使用查找值创建新的熊猫数据框

时间:2018-10-14 16:30:54

标签: python pandas dataframe

我有一个熊猫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

我似乎找不到合适的功能来执行此操作。

2 个答案:

答案 0 :(得分:1)

使用RandomStringUtils

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个数据帧开始:stockspricesfx。然后,您可以将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