2017-08-15 135 views
3

我有以下DF:如何將一列分成2列?

    0 
0 Fuerte venta (0,00)* 
1 Infraponderar (0,00)* 
2  Neutral (14,00)* 
3 Sobreponderar (2,00)* 
4 Fuerte compra (11,00)* 

我怎麼能分裂成列兩列,以獲得以下輸出:

  0   1 
0 Fuerte venta (0,00)* 
1 Infraponderar (0,00)* 
2  Neutral (14,00)* 
3 Sobreponderar (2,00)* 
4 Fuerte compra (11,00)* 

回答

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)* 
4

使用.str.rsplitexpand=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

我想擴大=真,+1 – Vaishali

+2

所以我.... { - : – piRSquared

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理解是最快的大,小大tasets。

enter image description here

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) 
+0

你知道我通常就像是在上面,但在許多其他的圖表,這種情況和在我經常處於頂峯的地方,我不認爲這很好。 –

+0

現在我熟悉你的性能偏好了,我會確保切換我的軸。 ( - :但嚴重的是,我發佈這些主要是因爲我想知道,而且我認爲我可能會分享 – piRSquared

+0

我很感謝你的分享,謝謝 –