我有以下df:
0
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
如何将列拆分为2列以获得以下输出:
0 1
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
答案 0 :(得分:4)
将.str.rsplit
与expand=True
:
df['0'].str.rsplit(' ', n=1, expand=True)
输出:
0 1
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
答案 1 :(得分:3)
您可以使用str.rsplit
pd.DataFrame(df['0'].str.rsplit(' ', 1).tolist())
你得到了
0 1
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
答案 2 :(得分:2)
选项1
列表理解和str.rsplit
pir2
pd.DataFrame(
pd.DataFrame([x.rsplit(' ', 1) for x in df['0'].values.tolist()])
)
0 1
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
选项2
使用np.core.defchararray.rsplit
pir1
pd.DataFrame(
np.core.defchararray.rsplit(df['0'].values.astype(str), ' ', 1).tolist()
)
0 1
0 Fuerte venta (0,00)*
1 Infraponderar (0,00)*
2 Neutral (14,00)*
3 Sobreponderar (2,00)*
4 Fuerte compra (11,00)*
<强>时序强>
以下代码
对于大型和小型数据集,list
理解最快。
pir1 = lambda d: pd.DataFrame(np.core.defchararray.rsplit(d['0'].values.astype(str), ' ', 1).tolist())
pir2 = lambda d: pd.DataFrame([x.rsplit(' ', 1) for x in d['0'].values.tolist()])
bos = lambda d: d['0'].str.rsplit(' ', n=1, expand=True)
vai = lambda d: pd.DataFrame(d['0'].str.rsplit(' ', 1).tolist())
results = pd.DataFrame(
index=pd.Index([10, 30, 100, 300, 1000, 3000]),
columns='pir1 pir2 bos vai'.split()
)
for i in results.index:
d = pd.concat([df] * i, ignore_index=True)
for j in results.columns:
stmt = '{}(d)'.format(j)
setp = 'from __main__ import d, {}'.format(j)
results.set_value(i, j, timeit(stmt, setp, number=100))
results.plot(loglog=True)