【发布时间】:2020-05-08 22:48:31
【问题描述】:
我编写了这段代码,以便对任何 Pandas DataFrame 进行分组,并快速获取分组大小和数据帧的示例行。
效果很好,但有一个问题:
新列/索引“大小”的名称是固定,因为.assign( ... ) 命令不接受变量。因此,如果我的 DataFrame 有一个名为“Size”的列,它就会丢失。
我的计划是检查是否存在名为“Size”的列,如果存在,
为索引使用不同的名称。我可以将assign 命令与
字段名称的变量,而不是固定文本?
我想避免像多次重命名列这样的 hacky 解决方案。
import pandas as pd
try:
from pandas.api.extensions import register_dataframe_accessor
except ImportError:
raise ImportError('Pandas 0.24 or better needed')
@register_dataframe_accessor("cgrp")
class CustomGrouper:
"""Extra methods for dataframes."""
def __init__(self, df):
self._df = df
def group_sample(self, by, subset=None):
result = (self._df.groupby(by).apply(lambda x: x.sample(1).assign(Size = len(x)))).set_index('Size').sort_index(ascending=False)
return result
我可以这样称呼
df.cgrp.group_sample(by=['column1', ... ])
并获得带有索引“Size”的结果
【问题讨论】:
-
是什么阻止您创建函数并在应用中使用它?
-
@G.Anderson - 是的,这就是我要找的,谢谢