熊猫使用列拆分作为新索引设置索引

时间:2018-07-31 14:53:35

标签: python python-3.x pandas

我有一个第三方提供的数据框:

r = get_finance_rate([eq_opt_px.index[0],vol_opt_px.index[0]], expiry)

r:

    ticker                          field           value
0   SPX US 08/17/2018 C2830.0 Index OPT_FINANCE_RT  2.004648
1   VXX US 08/17/2018 C27.0 Index   OPT_FINANCE_RT  2.03248

由于输出的返回格式不符合我的需求,因此我想重置索引。我想做的最明显的解决方案是

r['aux id'] = [x.split()[0] for x in r['ticker']]
r = r.set_index('aux id')

结果:

    ticker                          field           value
SPX SPX US 08/17/2018 C2830.0 Index OPT_FINANCE_RT  2.004648
VXX VXX US 08/17/2018 C27.0 Index   OPT_FINANCE_RT  2.03248

但是我想做类似的事情

r = get_finance_rate([eq_opt_px.index[0],vol_opt_px.index[0]], expiry).set_index('ticker'.split(' ')[0])

上一条指令不执行分割

ticker                          field           value
SPX US 08/17/2018 C2830.0 Index OPT_FINANCE_RT  2.004648
VXX US 08/17/2018 C27.0 Index   OPT_FINANCE_RT  2.03248

有没有一种方法可以完成我想要的而无需创建临时列?

3 个答案:

答案 0 :(得分:2)

尝试使用单线:

r = get_finance_rate([eq_opt_px.index[0],vol_opt_px.index[0]], expiry)\
       .pipe(lambda x: x.set_index(x.ticker.str.split().str[0]).rename_axis('aux_id')

IIUC,您必须分两个步骤进行操作:

r = get_finance_rate([eq_opt_px.index[0],vol_opt_px.index[0]], expiry)
r = r.set_index(r.ticker.str.split().str[0]).rename_axis('aux_id')

输出:

                                 ticker           field     value
aux_id                                                           
SPX     SPX US 08/17/2018 C2830.0 Index  OPT_FINANCE_RT  2.004648
VXX       VXX US 08/17/2018 C27.0 Index  OPT_FINANCE_RT  2.032480

答案 1 :(得分:1)

df.set_index=df.ticker.apply(lambda x: x.split(' ')[0])
df.ticker=df.ticker.apply(lambda x: x.split(' ')[1:])

答案 2 :(得分:1)

r.assign(aux_id = lambda x: x['ticker'].str.split(expand = True)[0])
    .set_index('aux_id')
                                ticker           field     value
aux_id
SPX   SPX US 08/17/2018 C2830.0  Index  OPT_FINANCE_RT  2.004648
VXX   VXX US 08/17/2018 C27.0    Index  OPT_FINANCE_RT  2.032480