gpt4 book ai didi

python - groupby 和 resample 对 pandas 数据框的同时操作?

转载 作者:太空狗 更新时间:2023-10-30 01:19:55 26 4
gpt4 key购买 nike

我的 pandas 数据框由一个分类列 JOB_TITLE、一个数字列 BASE_SALARY 和一个日期时间索引 JOIN_DATE 组成。我想对分类和下采样日期时间组执行聚合,如下所示:

# Resampled at frequency of start data of every 5 years
mean_agg = (df
.groupby('JOB_TITLE')
.resample('5AS')['BASE_SALARY']
.mean())

不幸的是,由于 groupby 操作发生在重采样之前,因此重采样操作是针对每个 JOB_TITLE 组独立执行的。这导致以下系列:

| JOB_TITLE         | JOIN_DATE  |       |
|-------------------|------------|-------|
| Data Scientist | 2004-01-01 | 60000 |
| | 2009-01-01 | 75000 |
| | 2014-01-01 | 90000 |
| | | |
| Software Engineer | 2001-01-01 | 70000 |
| | 2006-01-01 | 85000 |
| | 2011-01-01 | 90000 |
| | 2016-01-01 | 85000 |

如您所见,数据科学家组和软件工程师在 JOIN_DATE 级别的索引未对齐。当您按如下方式为级别 JOB_TITLE 应用 unstack 时,这会产生问题:

mean_agg.unstack('JOB_TITLE')

这会产生以下数据框:

| JOB_TITLE  | Data Scientist | Software Engineer |
|------------|----------------|-------------------|
| JOIN_DATE | | |
| 2001-01-01 | NaN | 70000 |
| 2004-01-01 | 60000 | NaN |
| 2006-01-01 | NaN | 85000 |
| 2009-01-01 | 75000 | NaN |
| 2011-01-01 | NaN | 70000 |
| 2014-01-01 | 90000 | NaN |
| 2016-01-01 | NaN | 85000 |

如何避免 groupby 和 resample 的这种顺序操作,而是同时执行操作?谢谢!

最佳答案

更新 Pandas 0.21 答案:pd.TimeGrouper is getting deprecated ,改用 pd.Grouper。

mean_agg = (df.groupby(['JOB_TITLE',pd.Grouper(freq='5AS')])['BASE_SALARY']
.mean())

mean_agg.unstack('JOB_TITLE')

我们尝试使用 pd.TimeGrouper 而不是使用 resample

mean_agg = (df
.groupby(['JOB_TITLE',pd.TimeGrouper(freq='5AS')])['BASE_SALARY']
.mean())

mean_agg.unstack('JOB_TITLE')

TimeGrouper 对齐分组时间范围的 bin。

关于python - groupby 和 resample 对 pandas 数据框的同时操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com