python - 如何为熊猫中的每个逗号分隔值创建一个新行
问题描述
我有一个这样的数据框:
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
。
这是代码的输出:
解决方案
这应该这样做:
(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
推荐阅读
- python - 在python中存储列表的最佳方法?
- javascript - 在 forEach 循环中使用动态键
- selenium - 在不同的环境中运行黄瓜功能
- amazon-web-services - 自动化外部 hive/athena 表分区管理
- javascript - 使用元素内部文本作为不同元素上的 CSS 值
- angular - 角解析器不工作。路由从不订阅返回的 observable
- jquery - 使用jquery输入数据时调整长度
- android - 为什么它有时代表整个字符串,有时代表 Kotlin 中的每个字符?
- python - 如何获取目录中最后列出的目录的路径?
- graphql - graphql-cli 输出不产生@unique