为了账号安全,请及时绑定邮箱和手机立即绑定

拆分(爆炸)熊猫数据串条目以分隔行

拆分(爆炸)熊猫数据串条目以分隔行

慕哥6287543 2019-06-03 15:06:40
拆分(爆炸)熊猫数据串条目以分隔行我有一个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 回答

?
慕田峪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

然后您只需重命名列


查看完整回答
反对 回复 2019-06-03
?
慕容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


查看完整回答
反对 回复 2019-06-03
  • 3 回答
  • 0 关注
  • 489 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信