Как сгруппировать, а затем транспонировать фрейм данных без суммирования

#python #dataframe #pandas-groupby

Вопрос:

Мне нужно сгруппировать идентификатор снизу фрейма данных, а затем перенести значение с помощью нового динамического инкрементного заголовка

 data = {'ID': ['A', 'B', 'B', 'B', 'C', 'C', 'D', 'D', 'D', 'D'],
'Value': [30, 760, 740, 755, 1 ,4, 56, 34, 76, 12]}
df = pd.DataFrame(data,columns=['ID',  'Value'])


    ID  Value
0   A   30
1   B   760
2   B   740
3   B   755
4   C   1
5   C   4
6   D   56
7   D   34
8   D   76
9   D   12

 

Мне нужно, чтобы результат был примерно таким

     ID  Value1  Value2  Value3  Value4
0   A    30         
1   B   760     740      755    
2   C     1       4     
3   D    56      34       76      12
 

Ответ №1:

Попробуй:

 out = (
    df.assign(tmp="Value"   (df.groupby("ID").cumcount()   1).astype(str))
    .pivot(index="ID", columns="tmp", values="Value")
    .fillna("")
    .reset_index()
)
out.columns.name = ""
print(out)
 

С принтами:

   ID  Value1 Value2 Value3 Value4
0  A    30.0                     
1  B   760.0  740.0  755.0       
2  C     1.0    4.0              
3  D    56.0   34.0   76.0   12.0
 

Ответ №2:

Следующее поможет вам хорошо продвинуться по пути туда:

 df.pivot(columns='ID').T.fillna('').reset_index().drop(columns='level_0')
 

Производящий:

     ID  0   1   2   3   4   5   6   7   8   9
0   A   30                                  
1   B       760 740 755                     
2   C                   1   4               
3   D                           56  34  76  12