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:如何根据一个公共键将多行数据组合成一行?

通过 vba ms 访问将多值列的数据绑定到组合框中

Pandas: 如何将一列中的文本拆分为多行? | Python

从访问中读取多值列到c#

oracle中如何把表中具有相同值列的多行数据合并成一行

如何根据两列将直方图拆分为多个图?