Удаление элементов в группах pandas DataFrameGroupByPython

Программы на Python
Ответить
Anonymous
 Удаление элементов в группах pandas DataFrameGroupBy

Сообщение Anonymous »

У меня есть фрейм данных df, состоящий из n столбцов, которые являются группами, и одного столбца «данные». Затем этот кадр данных группируется по n групповым столбцам.

Код: Выделить всё

df = pd.DataFrame(data={"g0": ["foo", "foo", "bar", "bar"],
"g1": ["baz", "baz", "baz", "qux"],
...,
"gn": [...],
"data": [0.1, 0.3, 0.4, 0.2]},
index=["a", "b", "c", "d"])
groups = df.groupby(by=["g0", "g1", ..., "gn"], sort=False)
Затем у меня есть список idx_kept, который включает только некоторые исходные индексы фреймов данных, например. idx_kept = ["a", "b", "d"]. Есть ли способ фильтровать группы и сохранять только те данные, которые изначально имели индексы в idx_kept? Насколько я понимаю, DataFrameGroupBy.filter не подходит в этом случае, поскольку он использует агрегатную функцию и удаляет целые группы.
Я мог бы напрямую отфильтровать df, чтобы получить df_filtered, и выполнить groups_filtered=df_filtered.groupby(by=["g0", "g1", ..., "gn"], sort=False). Однако в моем процессе мне нужны и groups, и groups_filtered, поэтому моя цель — избежать второго groupby, чтобы сэкономить время. Есть ли элегантный/быстрый способ добиться этого?
Изменить: Я понимаю, что мне следовало предоставить дополнительную информацию, поскольку я получил хорошие ответы, которые не подошли для моего случая. Моя конечная цель — сравнить len(groups) и len(groups_filtered). В этом примере используются g0, g1 и idx_kept = ["a", "b", "d"], len(groups) = 3, но len(groups_filtered) = 2, поскольку "c" был единственным членом своей группы. Однако если idx_kept = ["a", "c", "d"], len(groups_filtered) = 3, потому что "b" был частью группы, содержащей "a" и "b". Так что, возможно, есть другой подход, отличный от того, о котором я думал.

Подробнее здесь: https://stackoverflow.com/questions/797 ... pby-groups
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»