0

I have a large dataframe which looks as following:

Mo  Gr  Data

9   A   36
9   A   26
4   A   16
4   A   145
9   B   173
7   A   41
4   A   13

I want to pivot it get list such that:

Mo  Gr  List
4   A   [16, 145, 13]
7   A   [41]
9   A   [36, 26]
9   B   [173]

I am not sure how to approach this problem?

Zanam
  • 4,607
  • 13
  • 67
  • 143
  • `df.groupby('No').agg({'Gr':'first', 'Data':list}).reset_index()`. – Quang Hoang May 12 '20 at 20:10
  • Does this answer your question? [grouping rows in list in pandas groupby](https://stackoverflow.com/questions/22219004/grouping-rows-in-list-in-pandas-groupby) – UJIN May 12 '20 at 20:17

2 Answers2

1

Something like this might work -

df.groupby(['Mo', 'Gr'])['Data'].apply(lambda x: x.tolist()).reset_index()
     Mo Gr           Data
 0   4  A      [16, 145, 13]
 1   7  A               [41]
 2   9  A           [36, 26]
 3   9  B              [173]
piRSquared
  • 285,575
  • 57
  • 475
  • 624
Sajan
  • 1,247
  • 1
  • 5
  • 13
1

agg/list

df.groupby(['Mo', 'Gr'], as_index=False).Data.agg(list)

   Mo Gr           Data
0   4  A  [16, 145, 13]
1   7  A           [41]
2   9  A       [36, 26]
3   9  B          [173]

Conventional dict

results = {}
for m, g, d in df.itertuples(index=False):
    results.setdefault((m, g), []).append(d)

pd.DataFrame([(m, g, d) for (m, g), d in results.items()], columns=df.columns)

   Mo Gr           Data
0   9  A       [36, 26]
1   4  A  [16, 145, 13]
2   9  B          [173]
3   7  A           [41]
piRSquared
  • 285,575
  • 57
  • 475
  • 624