如何为熊猫列中的每个逗号分隔值创建新行
问题内容:
我有一个这样的数据框:
text category
sfsd sgvv abc,xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc,xyz
我想要这样的输出:
text category
sfsd sgvv abc
sfsd sgvv xyz
zydf sefs sdfsd yyy
dfsd dsrgd dggr xyz
eter vxg wfe abc
dfvf ertet abc
dfvf ertet abc
基本上为列中的每个两个或更多类别创建一个新行category
。
问题答案:
将DataFrame.explode
(pandas
0.25+)与Series.str.split
:
df1 = (df.assign(category = df['category'].str.split(','))
.explode('category')
.reset_index(drop=True))
对于较早的熊猫版本,首先DataFrame.set_index
不用于分隔符列,然后Series.str.split
通过进行重塑DataFrame.stack
,最后DataFrame.reset_index
-首先删除的第二级,MultiIndex
然后将索引转换为列:
df1 = (df.set_index('text')['category']
.str.split(',', expand=True)
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='category'))
print (df1)
text category
0 sfsd sgvv abc
1 sfsd sgvv xyz
2 zydf sefs sdfsd yyy
3 dfsd dsrgd dggr xyz
4 eter vxg wfe abc
5 dfvf ertet abc
6 dfvf ertet xyz