pandas:一列分解成多列 series.str.split(',',expand=True);pyspark 一列分解成多列

源shuju

    question_id                           id
0         17576                  70391,70394
1         17576      70391,70392,70393,70394
2         17576                  70391,70392
3         40430         155032,155033,155034
4         40430  155032,155033,155034,155035
5         40430         155033,155034,155035
6         40430                155032,155035
7         40430                155034,155035
8         40430                155032,155034
9         40430         155032,155034,155035
10        40430                155033,155034
11        40430                155032,155033
12        40430                155033,155035
13        40430         155032,155033,155035

pandas solution

df.join(df['id'].str.split(',',expand=True)

result

         0       1       2       3
0    70391   70394    None    None
1    70391   70392   70393   70394
2    70391   70392    None    None
3   155032  155033  155034    None
4   155032  155033  155034  155035
5   155033  155034  155035    None
6   155032  155035    None    None
7   155034  155035    None    None
8   155032  155034    None    None
9   155032  155034  155035    None
10  155033  155034    None    None
11  155032  155033    None    None
12  155033  155035    None    None
13  155032  155033  155035    None

#注意expand=True

df.join(df['id'].str.split(',',expand=True))
    question_id                           id       0       1       2       3
0         17576                  70391,70394   70391   70394    None    None
1         17576      70391,70392,70393,70394   70391   70392   70393   70394
2         17576                  70391,70392   70391   70392    None    None
3         40430         155032,155033,155034  155032  155033  155034    None
4         40430  155032,155033,155034,155035  155032  155033  155034  155035
5         40430         155033,155034,155035  155033  155034  155035    None
6         40430                155032,155035  155032  155035    None    None
7         40430                155034,155035  155034  155035    None    None
8         40430                155032,155034  155032  155034    None    None
9         40430         155032,155034,155035  155032  155034  155035    None
10        40430                155033,155034  155033  155034    None    None
11        40430                155032,155033  155032  155033    None    None
12        40430                155033,155035  155033  155035    None    None
13        40430         155032,155033,155035  155032  155033  155035    None

pyspark solution

 tdf=df.select(F.split(df.id,',').alias('ss'),'question_id','count_num')
 tdf.sort('question_id').show()
 res=tdf.select(F.explode(tdf.ss).alias('new'),'question_id','count_num')
res.sort('question_id').show()
res.groupBy('question_id','new').sum().sort('question_id').show()

result

在这里插入图片描述

在这里插入图片描述

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值