Pandas数据框架:如何按多值列将一行分成多行?[英] Pandas dataframe: how do I split one row into multiple rows by multi-value column?

本文是小编为大家收集整理的关于Pandas数据框架:如何按多值列将一行分成多行?的处理方法,想解了Pandas数据框架:如何按多值列将一行分成多行?的问题怎么解决?Pandas数据框架:如何按多值列将一行分成多行?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个如下所示的数据框:

   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

关于如何最好地做到这一点的任何建议?

推荐答案

假设 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

本文地址:https://www.itbaoku.cn/post/1727960.html