[Pandas] 多值列拆分成多行

43f36bcf57cd415287ce8fe32309249e.png
美图欣赏2022/06/16

import pandas as pd

df = pd.DataFrame([['A123','82-0382-07'],
                   ['B437','83-0382-05,84-0393-06'],
                   ['C110','83-0382-05,83-0393-05,85-0022-01']
                  ],columns = ['Material','Product_number'])

# Product_number列(多值列)拆分成多行
df = df.drop(['Product_number'], axis=1).join(df['Product_number'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Product_number'))

df

6823b363162d43e1b1d8c714d8c7c949.png

处理后的df

9dcca7a3cc124d7ba8a3aef8d5166042.png

针对下述公式进行拆分步骤具体讲解

df = df.drop(['Product_number'], axis=1).join(df['Product_number'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Product_number'))

【1】.drop()

res1 = df.drop(['Product_number'], axis=1)

1b47754ca46b445cb8bf45c8a3ead606.png

【2】.str.split()

# 不加参数expand = True,split()会返回拆分后的字符串数组
res2 = df['Product_number'].str.split(',')

f75bd0efcbc4494db53df5706bd4296e.png

# 加参数expand = True,会将数组拆开,数组中的每一个元素都会单独保存
res3 = df['Product_number'].str.split(',', expand=True)

12fb511c1e89476e917ba195876a2f49.png

【3】.stack()

# stack()将数据的列columns旋转成行index
res4 = df['Product_number'].str.split(',', expand=True).stack()

7634958c25e74e0b8152aa3030c62c24.png

【4】.reset_index(level=1, drop =True)

# reset_index(level=1, drop =True)
res5 = df['Product_number'].str.split(',', expand=True).stack().reset_index(level=1, drop=True)

35782cbe94244e33942a18a6d20a3e16.png

【5】.rename()

# rename()
res6 = df['Product_number'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Product_number')

78c0e744e3b946a3b7761f098fd5246d.png

【6】.join()

# join()
res7 = df.drop(['Product_number'], axis=1).join(df['Product_number'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Product_number'))
# 相当于res1.join(res6)
res8 = res1.join(res6)

f0df9da4db5142f4af432037d399ac0f.png

ff0d4c453cc14629ac47cb2fb6031769.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值