【问题标题】:Is there an implementation of Hadley's ddply for python?是否有适用于 python 的 Hadley ddply 的实现?
【发布时间】:2011-06-22 01:50:03
【问题描述】:

我发现 Hadley 的 plyr R 包非常有用,它是用于转换数据的出色 DSL。解决的问题是如此普遍,以至于我在其他用例中遇到它,而不是在 R 中操作数据,而是在其他编程语言中。

有谁知道是否存在一个为 python 做类似事情的模块?比如:

def ddply(rows, *cols, op=lambda group_rows: group_rows):
    """group rows by cols, then apply the function op to each group
       and return the results aggregating all groups
       rows is a dict or list of values read by csv.reader or csv.DictReader"""
    pass

实施起来应该不会太难,但如果它已经存在那就太好了。我会实现它,我会使用itertools.groupbycols 分组,然后应用op 函数,然后使用itertools.chain 将其全部链接起来。有没有更好的解决方案?

【问题讨论】:

    标签: python r plyr


    【解决方案1】:

    这是我起草的实现:

    def ddply(rows, cols, op=lambda group_rows: group_rows): 
        """group rows by cols, then apply the function op to each group 
        rows is list of values or dict with col names (like read from 
        csv.reader or   csv.DictReader)"""
        def group_key(row):                         
            return (row[col] for col in cols)
        rows = sorted(rows, key=group_key)
        return itertools.chain.from_iterable(
            op(group_rows) for k,group_rows in itertools.groupby(rows, key=group_key)) 
    

    另一个步骤是拥有一组可用作op 的预定义函数,例如sum 和其他实用函数。

    【讨论】:

    • operator 模块可能对您的预制功能很方便。
    • 如果你能在 pandas python 模块上写这个,那么你可能会赢得互联网(至少在我看来)
    • @MikeDewar:有熊猫的实现吗?
    • 我使用 Pandas 的 pivot_table 函数pandas.pydata.org/pandas-docs/stable/reshaping.html
    • 我试过了,但没有用。我只是想将一个框架减少到它的组中,并创建一个包含分组列的列表。假设我有一个数据框,其中包含我在整个月中一周中的每一天吃的饭菜。我希望我可以每周将它分组,并列出所有膳食,例如星期一:[鸡蛋、牛奶、意大利面]。我怎么能在 python 中做到这一点?
    猜你喜欢
    • 2011-03-20
    • 2023-03-21
    • 2018-11-21
    • 2016-11-08
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多