使用pandas split、explode实现按字符分割列并转为多行

假设有这么一组数据:

>>> df = pd.DataFrame([{'编码':'01', '价格':'1.1,1.3,3.4', '水果':'苹果,柿子,梨'},{'编码':'01', '价格':'2.2,3.4', '水果':'桔子,香蕉'}])
>>> print(df)
   编码           价格       水果
0  00  1.1,1.3,3.4  苹果,柿子,1  01      2.2,3.4    桔子,香蕉

其中价格和水果是按照位置一一对应的,如苹果:1.1、柿子:1.3、梨:3.4,我们希望将价格与水果两列都拆开,但又不影响水果名与价格的对应关系

   编码   价格  水果
0  00  1.1  苹果
1  00  1.3  柿子
2  00  3.43  01  2.2  桔子
4  01  3.4  香蕉

通过如下操作即可实现

>>> df.set_index(['编码']).apply(lambda x: x.str.split(',').explode()).reset_index()

其中set_index和reset_index()是为了锁定编码列,防止误将其进行拆分,上面例子中编码列不存在逗号,因而这步加不加对结果没有影响。
在使用过程中发现,如果set_index中列数过多容易报错,因而可将原表拆为两部分,一部分为不需要拆分的列,另一部分仅为需要拆分的列;然后将后者拆分后再通过某公共列进行merge。
参考:https://stackoverflow.com/a/50731254

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值