При использовании groupby следует избегать использования методов apply () внутри функций, которые используют apply ()
Ниже приведен правильный код, который дает желаемые результаты.
Отказ от ответственности: код может быть написан более эффективно. Цель состоит в том, чтобы продемонстрировать, что мы должны избегать вызова apply()
методов внутри groupby.apply()
. Это отрицательно сказывается на том, что группы, к которым мы его применяем, имеют одинаковое количество строк в каждой группе. Если количество строк в каждой группе не равно, все идет гладко. Опять же, это происходит только тогда, когда группы имеют одинаковое количество строк.
Привет пользователю: u10-forward
import pandas as pd
def dummy_func_nested(df):
df['new_col_2'] = df['value'] * -1
return df
def dummy_func(df_group):
df_group['new_col_1'] = None
# apply dummy_func_nested
df_group = dummy_func_nested(df_group)
return df_group
def pandas_groupby():
# initialize data
df = pd.DataFrame([
{'country': 'US', 'value': 100.00, 'id': 'a'},
{'country': 'US', 'value': 95.00, 'id': 'b'},
{'country': 'CA', 'value': 56.00, 'id': 'y'},
{'country': 'CA', 'value': 40.00, 'id': 'z'},
])
# group by country and apply first dummy_func
new_df = df.groupby('country').apply(dummy_func)
# new_df and df should have the same list of countries
assert new_df['country'].tolist() == df['country'].tolist()
print(df)
if __name__ == '__main__':
pandas_groupby()
Тем не менее, я все еще думаю, что это ошибка, из-за невозможности вызова apply()
методов внутри groupby.apply()
.