Результат GroupBy Power Query не совпадает с результатом pandas.groupby? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь "перенести" преобразование группировки строк из PowerQuery в Python. В PowerQuery запрос выглядит примерно так:

#"Grouped Rows" = Table.Group(Source, {"col1", "col2", "col3", "col4"}, {{"Count", each Table.RowCount(_), type number}}),
#"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Count"}),

В python я пытался использовать что-то вроде

df1 = df.groupby(["col1", "col2", "col3", "col4"]).apply(lambda x:x)

Однако результаты получаются совсем по-другому. Обратите внимание, что есть больше столбцов вне оператора groupby. Должен ли я сначала выбрать только нужные мне столбцы, а затем выполнить группировку, или я должен сгруппировать, а затем выбрать столбцы?

Существует также столбец суммирования, который был добавлен впоследствии в PowerQuery, но я добавил его ранее на этапах с кодом Python. Я полагаю, что вы исключите этот столбец из группы.

Было бы также полезно, если бы кто-то мог объяснить, что именно происходит, когда вы группируете мои несколько столбцов. И, возможно, почему два метода ведут себя по-разному. Это похоже на выделение только этих столбцов и удаление повторяющихся строк?

1 Ответ

0 голосов
/ 02 ноября 2019

Эквивалент выражения M в пандах:

Table.Group(
    Source,
    {"col1", "col2", "col3", "col4"},
    {{"Count", each Table.RowCount(_), type number}}
)
df.groupby(["col1", "col2", "col3", "col4"]) \
    .apply(lambda x: pd.Series([len(x)], index=["Count"]))

В то время как Table.Group() в M принимает список имен столбцов и функций, которые генерируют агрегированные значения столбцов, pandas GroupBy.apply() принимаетфункция, которая возвращает Серию, содержащую агрегированные значения столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...