为啥 pandas.groupby 保留密钥?

Posted

技术标签:

【中文标题】为啥 pandas.groupby 保留密钥?【英文标题】:Why does pandas.groupby keep the key?为什么 pandas.groupby 保留密钥? 【发布时间】:2022-01-22 16:47:21 【问题描述】:

我想对数据框执行以下操作。

import pandas as pd
import datetime

t = pd.DataFrame('id': [1, 1, 2, 2], 
                  'date': [datetime.date(2020,1,1), datetime.date(2020,1,2)] * 2, 
                  'value': [1, 2, 3, 5])

t.groupby('id').apply(lambda df: df.set_index('date').diff())

我得到了下面的结果

                    id  value
id date                  
1  2020-01-01  NaN    NaN
   2020-01-02  0.0    1.0
2  2020-01-01  NaN    NaN
   2020-01-02  0.0    2.0

我的问题是为什么要保留 id 列。我希望“id”列在此操作后消失。我想要的是

t.set_index(['id', 'date']).groupby(level=0).diff()
Out[92]: 
               value
id date             
1  2020-01-01    NaN
   2020-01-02    1.0
2  2020-01-01    NaN
   2020-01-02    2.0

【问题讨论】:

当您运行 apply 时,您实际上是在每个具有 id 的子数据帧上运行一个 for 循环。内置函数/聚合知道如何将 groupby 键与数据框分开 【参考方案1】:

一个想法是指定列:

df = t.groupby('id')[['date','value']].apply(lambda df: df.set_index('date').diff())

我认为原因是因为使用了DataFrame.diff,所以处理groupby.apply中的所有列。

【讨论】:

以上是关于为啥 pandas.groupby 保留密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何对一列执行 pandas groupby 操作,但将另一列保留在结果数据框中

pandas.groupby中的迭代

如何让 pandas groupby 不偷懒?

Python、Pandas:GroupBy 属性文档

为啥要保留从存储库中检查出来的秘密?

python pandas groupby分组后的数据怎么用