Pandas 数据框:如何按多值列将一行拆分为多行? [复制]
Posted
技术标签:
【中文标题】Pandas 数据框:如何按多值列将一行拆分为多行? [复制]【英文标题】:Pandas dataframe: how do I split one row into multiple rows by multi-value column? [duplicate] 【发布时间】:2019-05-20 11:40:38 【问题描述】:我有一个如下所示的数据框:
issue_key date pkey component case_count
0 1060 2018-03-08 PROJ console,configuration,management 8
1 1464 2018-04-24 PROJ2 protocol 1
2 611 2017-03-31 PROJ None 2
3 2057 2018-10-30 PROJ ha, console 0
我需要将组件列中具有多个值的行拆分为每个组件一行。
完成后,数据框应如下所示:
issue_key date pkey component case_count
0 1060 2018-03-08 PROJ console 8
1 1060 2018-03-08 PROJ configuration 8
2 1060 2018-03-08 PROJ management 8
3 1464 2018-04-24 PROJ2 protocol 1
4 611 2017-03-31 PROJ None 2
5 2057 2018-10-30 PROJ ha 0
6 2057 2018-10-30 PROJ console 0
关于如何最好地做到这一点的任何建议?
【问题讨论】:
请编辑表格格式。现在很难理解。 看到一样,刚刚完成编辑。 【参考方案1】:假设dd
是您的数据框。你可以这样做:
# convert to list
dd['component'] = dd['component'].str.split(',')
# convert list of pd.Series then stack it
dd = (dd
.set_index(['issue_key','date','pkey','case_count'])['component']
.apply(pd.Series)
.stack()
.reset_index()
.drop('level_4', axis=1)
.rename(columns=0:'component'))
issue_key date pkey case_count component
0 1060 2018-03-08 PROJ 8 console
1 1060 2018-03-08 PROJ 8 configuration
2 1060 2018-03-08 PROJ 8 management
3 1464 2018-04-24 PROJ2 1 protocol
4 611 2017-03-31 PROJ 2 None
5 2057 2018-10-30 PROJ 0 ha
6 2057 2018-10-30 PROJ 0 console
【讨论】:
如果有另一列是组件的变量,例如组件的颜色,我们如何实现这一点。例如:控制台,配置有蓝色,另一种颜色的白色。以上是关于Pandas 数据框:如何按多值列将一行拆分为多行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas:如何根据一个公共键将多行数据组合成一行?