拆分(爆炸)熊猫数据串条目以分隔行我有一个pandas dataframe其中一列文本字符串包含逗号分隔的值。我希望拆分每个CSV字段,并在每个条目中创建一个新行(假设CSV是干净的,只需要在‘,’上拆分)。例如,a应该变成b:In [7]: aOut[7]:
var1 var20 a,b,c 11 d,e,f 2In [8]: bOut[8]:
var1 var20 a 11 b 12 c 13 d 24 e 25 f 2到目前为止,我已经尝试过各种简单的函数,但是.apply方法在轴上使用时,似乎只接受一行作为返回值,而我无法获得.transform去工作。任何建议都将不胜感激!示例数据:from pandas import DataFrameimport numpy as np
a = DataFrame([{'var1': 'a,b,c', 'var2': 1},
{'var1': 'd,e,f', 'var2': 2}])b = DataFrame([{'var1': 'a', 'var2': 1},
{'var1': 'b', 'var2': 1},
{'var1': 'c', 'var2': 1},
{'var1': 'd', 'var2': 2},
{'var1': 'e', 'var2': 2},
{'var1': 'f', 'var2': 2}])我知道这是行不通的,因为我们通过numpy丢失了DataFrame元数据,但是它应该让您了解我试图做的事情:def fun(row):
letters = row['var1']
letters = letters.split(',')
out = np.array([row] * len(letters))
out['var1'] = letters
a['idx'] = range(a.shape[0])z = a.groupby('idx')z.transform(fun)
3 回答
![?](http://img1.sycdn.imooc.com/545862370001b03502200220-100-100.jpg)
慕田峪4524236
TA贡献1875条经验 获得超5个赞
像这样的事怎么样:
In [55]: pd.concat([Series(row['var2'], row['var1'].split(','))
for _, row in a.iterrows()]).reset_index()
Out[55]:
index 0
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
然后您只需重命名列
![?](http://img1.sycdn.imooc.com/545864000001644402200220-100-100.jpg)
慕容708150
TA贡献1831条经验 获得超4个赞
经过痛苦的实验,我发现了一些比公认的答案更快的东西,我让它起作用了。在我试用的数据集中,它的运行速度快了大约100倍。
如果有人知道如何使这更优雅,请务必修改我的代码。如果不将其他列设置为索引,然后重新设置索引并重新命名列,我就无法找到工作方式,但我可以想象还有其他的工作方式。
b = DataFrame(a.var1.str.split(',').tolist(), index=a.var2).stack()
b = b.reset_index()[[0, 'var2']] # var1 variable is currently labeled 0
b.columns = ['var1', 'var2'] # renaming var1
添加回答
举报
0/150
提交
取消