Pandas dataframe拆分b列字符串为多行,保持对应a列内容相同

文章介绍了如何在PandasDataFrame中使用explode方法将b列的逗号分隔字符串拆分为多行,以及如何结合str.split和cumcount函数实现更复杂的行拆分并添加累积计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

explode方法结合str.split:首先使用str.split方法将'b'列的字符串按逗号分隔为列表,然后用explode方法将这些列表拆分为多行

import pandas as pd  

data = {'a': [1, 2, 3],  
        'b': ['x,y,z', 'p,q', 'r,s,t,u']}  
df = pd.DataFrame(data)  
  
# 将'b'列的字符串拆分为列表,并使用explode方法将其拆分为多行  
df['b'] = df['b'].str.split(',')  
df = df.explode('b')  
  
# 重置索引以删除多余的行  
df = df.reset_index(drop=True)  
  
print(df)

'''
   a  b
0  1  x
1  1  y
2  1  z
3  2  p
4  2  q
5  3  r
6  3  s
7  3  t
8  3  u
'''

explode方法:

Pandas中,explode方法用于将DataFrame中的可迭代对象的列元素拆分成多行。如果某列包含可迭代对象(如列表、元组等),explode方法会为这些可迭代对象中的每个元素创建新的行,同时保留其他列的值。

如果某列列包含的是不可迭代对象,如普通字符串,则不能直接使用explode,可以先使用str.split方法将字符串拆分为列表,然后再使用explode方法。

彩蛋:

在拆分b列的同时增加一个c列,其内容为b列字符串拆分成列表后对应的索引:

str.split explode groupby.cumcount

import pandas as pd  
data = {'a': [1, 2, 3],  
        'b': ['x,y,z', 'p,q', 'r,s,t,u']}  
df = pd.DataFrame(data)  
  
# 链式操作
df = (df.assign(b=df['b'].str.split(','))  # 拆分字符串为列表  
        .explode('b')                      # 爆炸列表为多行  
        .assign(c=lambda x: x.groupby('a').cumcount()))  # 添加累积计数  
  
print(df)

'''
   a  b  c
0  1  x  0
0  1  y  1
0  1  z  2
1  2  p  0
1  2  q  1
2  3  r  0
2  3  s  1
2  3  t  2
2  3  u  3
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值