【问题标题】:Python Take first observation per group Using pandas.pivot_tablePython 使用 pandas.pivot_table 对每组进行第一次观察
【发布时间】:2015-02-06 07:33:02
【问题描述】:

如何使用 pandas.pivot_table 在 aggfunc=[] 中指定一个函数,以便我得到每个组的第一个观察结果,就像我运行 groupby().first() 的结果一样?

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    您可以使用 aggfunc='first':

    In [11]: df = pd.DataFrame([[1, 2, "A"], [1, 4, "A"], [5, 6, "B"]])
    
    In [12]: df
    Out[12]:
       0  1  2
    0  1  2  A
    1  1  4  A
    2  5  6  B
    
    In [13]: df.pivot_table(index=0, values=1, columns=2)  # default aggfunc is 'mean'
    Out[13]:
    2   A   B
    0
    1   3 NaN
    5 NaN   6
    
    In [14]: df.pivot_table(index=0, values=1, columns=2, aggfunc='first')
    Out[14]:
    2   A   B
    0
    1   2 NaN
    5 NaN   6
    

    我不确定文档中是否有用于 aggfunctions 的这些字符串的完整列表(它们也适用于 groupbys),我会看看...

    【讨论】:

    • 我认为在源映射“意思”到np.mean 等中有一个字典,尽管回想起来我认为 aggfunc="x" 只是在每个子组上调用 .x() ...... . 嗯。
    • 您好,感谢您的回答。您的代码有效。但是,它的工作方式与使用 groupby().first() 相同。我的目标是拥有 'first' 和其他 aggfunc 像 numpy.mean() 这样我就不必做两次并合并表。任何想法如何做到这一点?
    • 您可以将字典传递给aggfunc,其中包含您希望对每一列应用的函数,如下所示:df.pivot_table(index=0, aggfunc={0:'mean', 2:'first'})
    • @ZhongjieZhang 你是在跟我说话还是Primer?在任何一种情况下,这两种方法都有效,我已经使用 pandas 0.15.2 对自己进行了测试——它适用于上面的输出。您尝试了什么,什么失败了?
    • 嗨,安迪,正在和 Primer 交谈。真的吗?您还尝试了 df.pivot_table(index=0, aggfunc={0:'mean', 2:'first'})?我运行它时遇到了一些错误。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多