如何为 pandas 列中的每个逗号分隔值创建新行 [英] How to create a new row for each comma separated value in a column in pandas
本文介绍了如何为 pandas 列中的每个逗号分隔值创建新行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个像这样的数据框:
I have a dataframe like this:
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
列中为每个两个或更多类别创建一个新行.
Basically create a new row for each two or more category in category
column.
推荐答案
使用 Series.str.split
:
df1 = (df.assign(category = df['category'].str.split(','))
.explode('category')
.reset_index(drop=True))
首先要获取较早的熊猫版本 Series.str.split
并通过 DataFrame.stack
,最后 DataFrame.reset_index
-首先删除MultiIndex
的第二级,然后将索引转换为列:
For oldier pandas versions first DataFrame.set_index
for not separator column(s), then Series.str.split
and reshape by DataFrame.stack
, last DataFrame.reset_index
- first for remove second level of MultiIndex
and then for convert index to column:
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
这篇关于如何为 pandas 列中的每个逗号分隔值创建新行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文