Там много чего можно распаковать.
print("apply sum by axis 0")
#print(df.apply(sum))
print("fails")
print("apply sum by axis 1")
# print(df.apply(sum, axis=1))
print("fails")
... вышеописанное не работает, потому что вы применяете с функцией суммы Python, которая требует числовых типов. Вы можете использовать любое из следующих действий, чтобы исправить это (что, я думаю, скрытно зависит от способности numpy обрабатывать объекты dtypes, в которые их преобразовывает панда):
df.apply(np.sum)
df.sum()
Далее, эти два элемента говорят ось = 1 в операторе печати, но на самом деле это не так:
print("gb1 apply sum axis 1")
print(gb1.apply(sum))
print("gb2 apply sum axis 1")
# print(gb2.apply(sum))
print("fails")
... если вы добавите axis = 1, они будут работать и давать ощутимые результаты.
Обратите внимание, что у вас отсутствует закрывающая скобка в:
gb1.agg(lambda x: ";".join([x[0], x[1]])
... как в примере кода, так и в последующем комментарии об этом.
Кажется, вы говорите, что последний кусочек кода - это то, что достигает вашей цели. Предыдущая попытка:
gb1.agg(lambda x: ";".join(x))
... объединяет элементы в индексе одной группы, которая присутствует вместо отдельной серии. Проверьте:
print(gb1.groups)
Наконец, учитывая ваш фрейм данных, если вы хотите объединить столбцы с ";" между ними также можно сделать:
cols = ['ay','be']
df.apply(lambda x: ";".join((x[c] for c in cols)), axis=1)
или для небольшого количества предметов
df['concat'] = df['ay'] + ";" + df['be']
... вместо использования groupby.