12

I have a dataframe that appears as follows:

   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

I need to split the rows with multiple values in the component column into one row per component.

When done, the dataframe should appear as follows:

   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

Any suggestions on how best to do this?

Eric
  • 636
  • 2
  • 9
  • 23

1 Answers1

21

Let's say dd is your data frame. You can do:

# 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
YOLO
  • 20,181
  • 5
  • 20
  • 40
  • How do we achieve this incase there is another column which is a variable of component, say color of the component. Ex: console,configuration has blue,white in another column color. – pats4u Apr 30 '21 at 12:09