Агрегирование по идентификатору и добавление разных значений в разные столбцы pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas, как показано ниже:

 id  c1   c2       c3
1   5    text1    -4
2   8    text2    -1
1   4    text1     0
2   7    text2    -8
3   2    text3    -5
1   2    text1    -8
...
 

тогда это результат моего желания:

 id    c2       c3   c4  c5
1     text1    -4   0   -8
2     text2    -1  -8
3     text3    -5
...
 

, я попробовал этот фрагмент кода,

   df.groupby(['id','c2']).cumcount().add(1).astype(str)
 

но это не сработало.

Ответ №1:

Использование GroupBy.cumcount с DataFrame.set_index и Series.unstack с DataFrame.add_prefix :

 g = df.groupby(['id','c2']).cumcount().add(3)
df = df.set_index(['id','c2', g])['c3'].unstack().add_prefix('c').reset_index()
print (df)
   id     c2   c3   c4   c5
0   1  text1 -4.0  0.0 -8.0
1   2  text2 -1.0 -8.0  NaN
2   3  text3 -5.0  NaN  NaN
 

При необходимости замените NaN на 0 :

 g = df.groupby(['id','c2']).cumcount().add(3)
df = df.set_index(['id','c2', g])['c3'].unstack(fill_value=0).add_prefix('c').reset_index()
print (df)
   id     c2  c3  c4  c5
0   1  text1  -4   0  -8
1   2  text2  -1  -8   0
2   3  text3  -5   0   0