У меня есть большой фреймворк данных, и я группирую от одного до n столбцов и хочу применить функцию к этим группам через два столбца (например, foo и bar).
Здесь примерный кадр:
foo_function = lambda x: np.sum(x.a+x.b)
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[1,2,3,4,5,6],
'c':['q', 'q', 'q', 'q', 'w', 'w'],
'd':['z','z','z','o','o','o']})
# works with apply, but I want transform:
df.groupby(['c', 'd'])[['a','b']].apply(foo_function)
# transform doesn't work!
df.groupby(['c', 'd'])[['a','b']].transform(foo_function)
TypeError: cannot concatenate a non-NDFrame object
Но transform
, по-видимому, не может объединить несколько столбцов вместе, потому что он смотрит на каждый столбец отдельно (в отличие от приложения). Какая следующая лучшая альтернатива с точки зрения скорости/элегантности? например Я мог бы использовать apply
, а затем создать df['new_col']
с помощью pd.match
, но это потребует сопоставления иногда нескольких столбцов groupw (col1 и col2), которые кажутся действительно взломанными/будут принимать достаточное количество кода.
- > Есть ли функция, подобная groupby(). transform, которая может использовать функции, которые работают над несколькими столбцами? Если этого не существует, какой лучший взлом?