У меня возникли проблемы при переходе на панды из R, где пакет dplyr
может легко группироваться и выполнять несколько обобщений.
Пожалуйста, помогите улучшить мой существующий код Python для нескольких агрегатов:
import pandas as pd
data = pd.DataFrame(
{'col1':[1,1,1,1,1,2,2,2,2,2],
'col2':[1,2,3,4,5,6,7,8,9,0],
'col3':[-1,-2,-3,-4,-5,-6,-7,-8,-9,0]
}
)
result = []
for k,v in data.groupby('col1'):
result.append([k, max(v['col2']), min(v['col3'])])
print pd.DataFrame(result, columns=['col1', 'col2_agg', 'col3_agg'])
Вопросы:
- слишком многословный
- вероятно, может быть оптимизирован и эффективен. (Я переписал реализацию
groupby.agg
for-loop groupby
вgroupby.agg
и повышение производительности было огромным).
В R эквивалентный код будет:
data %>% groupby(col1) %>% summarize(col2_agg=max(col2), col3_agg=min(col3))
ОБНОВЛЕНИЕ: @ayhan решил мой вопрос, вот дополнительный вопрос, который я опубликую здесь вместо комментария:
Q2) Что является эквивалентом groupby().summarize(newcolumn=max(col2 * col3))
т. groupby().summarize(newcolumn=max(col2 * col3))
Агрегация/суммирование, где функция является составной функцией столбцов 2+?