我有一个这样的数据框:
text text2 category
sfsd sgvv sfsdfdf abc,xyz
zydf sefs sdfsd drdg yyy
dfsd dsrgd dggr dgd xyz
eter vxg wfe fs abc
dfvf ertet dggdss abc,xyz,bbb
我想要这样的输出:
text text2 category
sfsd sgvv sfsdfdf abc
sfsd sgvv sfsdfdf xyz
zydf sefs sdfsd drdg yyy
dfsd dsrgd dggr dgd xyz
eter vxg wfe fs abc
dfvf ertet dggdss abc
dfvf ertet dggdss xyz
dfvf ertet dggdss bbb
基本上在category
列中为每个两个或更多类别创建一个新行。
我尝试过:
df1 = (df.assign(category = df['category'].str.split(','))
.explode('category')
.reset_index(drop=True))
但是它似乎正在创建比预期更多的行。在我最初的df中,我有很多列,而不仅仅是text,text2和category。
原始数据帧的屏幕截图。
这里category
= NER_Category
。
这是代码的输出:
答案 0 :(得分:1)
这应该做到:
(df.set_index(df.columns.drop('category',1).tolist())['category']
.str.split(',', expand=True)
.stack()
.reset_index()
.rename(columns={0:'category'})
.loc[:, df.columns]
)
text text2 category
0 sfsd sgvv sfsdfdf abc
1 sfsd sgvv sfsdfdf xyz
2 zydf sefs sdfsd drdg yyy
3 dfsd dsrgd dggr dgd xyz
4 eter vxg wfe fs abc
5 dfvf ertet dggdss abc
6 dfvf ertet dggdss xyz
7 dfvf ertet dggdss bbb
答案 1 :(得分:0)
您仍然可以使用explode来做到这一点。
(
df.assign(category=df.category.str.split(','))
.explode('category')
)
text text2 category
0 sfsd sgvv sfsdfdf abc
0 sfsd sgvv sfsdfdf xyz
1 zydf sefs sdfsd drdg yyy
2 dfsd dsrgd dggr dgd xyz
3 eter vxg wfe fs abc
4 dfvf ertet dggdss abc
4 dfvf ertet dggdss xyz
4 dfvf ertet dggdss bbb