dft = pd.DataFrame({'C1': ['A','A','B','B'],
'C2': [1,2,3,4]})
def lam3(df):
return pd.DataFrame({'X': ['C','D','E'],
'Y': [11,22,33]})
Учитывая вышеупомянутый фрейм данных и функцию (которую я не могу изменить), я хотел бы запустить groupby + apply, чтобы каждая группа возвращала фрейм данных, как это
C1 C2 X Y
0 A 1 C 11
1 A 1 D 22
2 A 1 E 33
3 A 2 C 11
4 A 2 D 22
5 A 2 E 33
6 B 3 C 11
7 B 3 D 22
8 B 3 E 33
9 B 4 C 11
10 B 4 D 22
11 B 4 E 33
Выполнение ниже даетдополнительный столбец нумерованного индекса:
dft.groupby(['C1','C2']).apply(lam3)
Так что мне нужно сделать следующее, чтобы получить то, что я хочу:
dft.groupby(['C1','C2']).apply(lam3).reset_index().drop(columns='level_2')
Очевидно, это не является общим, так как level_2 зависит от того, сколько столбцовЯ использую в групповом режиме и слепо отбрасывая столбцы, начинающиеся с «уровня», потенциально могу удалить оригинальные столбцы.
Как использовать лямбда-функцию, которая возвращает фрейм данных в группе без возврата дополнительного индекса?
Вопрос похож на this , но каждая группа здесь возвращает фрейм данныхвместо серии.
РЕДАКТИРОВАТЬ: lam3 здесь только пример функции для демонстрации.В реальной версии могут быть операции, которые зависят от df.Дело в том, что функция lam3 возвращает фрейм данных в контексте groupby.Так что кросс-соединение не поможет