我有一个第三方提供的数据框:
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
有没有一种方法可以完成我想要的而无需创建临时列?
答案 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