Я пытаюсь применить пользовательскую функцию к каждой группе в объекте groupby и сохранить результат в новых столбцах в каждой группе. Функция возвращает 2 значения, и я хочу сохранить эти значения отдельно в 2 столбца в каждой группе.
Я пробовал это:
# Returns True if all values in Column1 is different.
def is_unique(x):
status = True
if len(x) > 1:
a = x.to_numpy()
if (a[0] == a).all():
status = False
return status
# Finds difference of the column values and returns the value with a message.
def func(x):
d = (x['Column3'].diff()).dropna()).iloc[0]
return d, "Calculated!"
# is_unique() is another custom function used to filter unique groups.
df[['Difference', 'Message']] = df.filter(lambda x: is_unique(x['Column1'])).groupby(['Column2']).apply(lambda s: func(s))
Но я получаю сообщение об ошибке: 'DataFrameGroupBy' object does not support item assignment
Я не хочу сбрасывать индекс и хочу просмотреть результат с помощью функции get_group
. Окончательный фрейм данных должен выглядеть так:
df.get_group('XYZ')
-----------------------------------------------------------------
| Column1 | Column2 | Column3 | Difference | Message |
-----------------------------------------------------------------
| 0 A | XYZ | 100 | | |
---------------------------------- | |
| 1 B | XYZ | 20 | 70 | Calculated! |
---------------------------------- | |
| 2 C | XYZ | 10 | | |
-----------------------------------------------------------------
Как наиболее эффективно достичь этого результата?