Вот тот, который работал для меня.

олжно быть легко, но почему-то я не мог найти решение, которое работает.

У меня есть пандас dataframe, который выглядит так:

index col1   col2   col3   col4   col5
0     a      c      1      2      f 
1     a      c      1      2      f
2     a      d      1      2      f
3     b      d      1      2      g
4     b      e      1      2      g
5     b      e      1      2      g

Я хочу сгруппировать по col1 и col2 и получитьsum() из col3 и col4. Col5 может быть отброшен, так как данные не могут быть агрегированы.

Вот как должен выглядеть результат. Я заинтересован в том, чтобы обаcol3 а такжеcol4 в результирующем кадре данных. Это действительно не имеет значения, еслиcol1 а такжеcol2 являются частью индекса или нет.

index col1   col2   col3   col4   
0     a      c      2      4          
1     a      d      1      2      
2     b      d      1      2      
3     b      e      2      4      

Вот что я попробовал:

df_new = df.groupby(['col1', 'col2'])["col3", "col4"].sum()

Это, однако, только возвращает агрегированные результатыcol4.

Я потерян здесь. Каждый пример, который я нашел, объединяет только один столбец, где проблема явно не возникает.

 A.Kot26 сент. 2017 г., 18:16
Проблема, вероятно, в том, чтоdf.col3.dtype скорее всего неint или числовой тип данных. Пытатьсяdf.col3 = df.col3.astype(int) перед тем как делатьgroupby

Ответы на вопрос(4)

df.col3.dtype скорее всего неint или числовой тип данных. Пытатьсяdf.col3 = df.col3.astype(int) перед тем как делатьgroupby

Кроме того, выберите столбцы после группировки, чтобы увидеть, агрегируются ли столбцы:

df_new = df.groupby(['col1', 'col2']).sum()[["col3", "col4"]]

Другое общее решение

df.groupby(['col1','col2']).agg({'col3':'sum','col4':'sum'}).reset_index()

Это даст вам необходимый вывод.

Приведенный выше ответ не работает для меня.

df_new = df.groupby(['col1', 'col2']).sum()[["col3", "col4"]]

Я группировал по столбцам по группам и по сумме.

Вот тот, который работал для меня.

D1.groupby(['col1'])['col2'].sum() << The sum at the end not the middle.
Решение Вопроса

Используяapply

df.groupby(['col1', 'col2'])["col3", "col4"].apply(lambda x : x.astype(int).sum())
Out[1257]: 
           col3  col4
col1 col2            
a    c        2     4
     d        1     2
b    d        1     2
     e        2     4

Если хочешьagg

df.groupby(['col1', 'col2']).agg({'col3':'sum','col4':'sum'})

Ваш ответ на вопрос