Python 在dataframe中将分隔符上的多个列拆分为行
我有一个熊猫数据框,如下所示:Python 在dataframe中将分隔符上的多个列拆分为行,python,pandas,dataframe,split,Python,Pandas,Dataframe,Split,我有一个熊猫数据框,如下所示: id pos value sent 1 a/b/c test/test2/test3 21 2 d/a test/test5 21 我想拆分(=explode)df['pos']和df['token'],以便数据帧如下所示: id pos value sent 1 a test
id pos value sent
1 a/b/c test/test2/test3 21
2 d/a test/test5 21
我想拆分(=explode)df['pos']
和df['token']
,以便数据帧如下所示:
id pos value sent
1 a test 21
1 b test2 21
1 c test3 21
2 d test 21
2 a test5 21
如果我把每一列分开,然后把它们连在一起,这是行不通的
pos=df.token.str.split('/',expand=True).stack().str.strip().reset_index(level=1,drop=True)
df1=pd.concat([pos,value],axis=1,key=['pos','value'])
有什么想法吗?我真的很感激
编辑:
我尝试在此处使用此解决方案:
但我得到了以下错误:
TypeError:无法根据规则“safe”将数组数据从dtype('int64')强制转换为dtype('int32')
我想这是一个与numpy有关的问题,尽管我不确定这是怎么发生的。我使用的是Python 2.7.14,我倾向于避免使用
堆栈
的魔力,而倾向于从头开始构建新的数据帧。这通常也更有效。下面是一种方法
import numpy as np
from itertools import chain
lens = list(map(len, df['pos'].str.split('/')))
res = pd.DataFrame({'id': np.repeat(df['id'], lens),
'pos': list(chain.from_iterable(df['pos'].str.split('/'))),
'value': list(chain.from_iterable(df['value'].str.split('/'))),
'sent': np.repeat(df['sent'], lens)})
print(res)
id pos sent value
0 1 a 21 test
0 1 b 21 test2
0 1 c 21 test3
1 2 d 21 test
1 2 a 21 test5
查看以下页面:@piRSquared的解决方案可以很容易地扩展到许多类似的情况,比如您已经同意的情况。这个解决方案很容易扩展,解决了我的问题。