首页 > 解决方案 > 如何将列拆分为具有某些功能的多列?

问题描述

我有这样的专栏

col1  
(0,0):19,(1,1):155  
(0,0):13,(0,1):32,(1,1):34  
(0,0):56,(1,0):43,(1,1):38  
(0,0):67,(0,1):45,(1,0):98,(1,1):70

我想把它分成四列:

(0,0)    (0,1)    (1,0)    (1,1)  
19        0        0       155  
13        32       0       34  
56        0        43      38  
67        45       98      70

我试过col.str.split(',\s*(?![^()]*\))',expand=True)但只能得到:

col1    col2    col3    col4  
(0,0):19    (1,1):155    NAN    NAN  
(0,0):13    (0,1):32     (1,1):34    NAN   
(0,0):56    (1,0):43     (1,1):38    NAN  
(0,0):67    (0,1):45     (1,0):98   (1,1):70

我想知道是否有办法得到我上面显示的内容?非常感谢!

标签: regexpandassplit

解决方案


您可以提取 , , 之后的数字,(0,0)然后删除该列:(0,1)(1,0)(1,1)col1

import pandas as pd
df = pd.DataFrame({'col1': ['(0,0):19,(1,1):155','(0,0):13,(0,1):32,(1,1):34','(0,0):56,(1,0):43,(1,1):38','(0,0):67,(0,1):45,(1,0):98,(1,1):70']})
df['(0,0)'] = df['col1'].str.extract(r'\(0,0\):(\d+)', expand=False).fillna(0)
df['(0,1)'] = df['col1'].str.extract(r'\(0,1\):(\d+)', expand=False).fillna(0)
df['(1,0)'] = df['col1'].str.extract(r'\(1,0\):(\d+)', expand=False).fillna(0)
df['(1,1)'] = df['col1'].str.extract(r'\(1,1\):(\d+)', expand=False).fillna(0)
df = df.drop(columns = ['col1'])

输出:

>>> df
  (0,0) (0,1) (1,0) (1,1)
0    19     0     0   155
1    13    32     0    34
2    56     0    43    38
3    67    45    98    70

推荐阅读