gpt4 book ai didi

python - 获取 Pandas 的每周百分位数?

转载 作者:行者123 更新时间:2023-12-01 00:06:36 25 4
gpt4 key购买 nike

我需要以下方面的帮助,请提前致谢。

我有以下代码按周分组:

weekdf = pd.DataFrame(df.groupby(['type', pd.Grouper(key='date', freq='W-SAT')])['id'].count())

它给了我以下 df:

type        date        id  
expired 2019-11-09 62
2019-11-16 87
2019-11-23 26
multi 2019-11-09 10
2019-11-16 14
2019-11-23 8
single 2019-11-09 296
2019-11-16 300
2019-11-23 230

我想要的是有一个 df 给我每周占总数的百分比。

类似...

百分比 = 每周、过期、多个和单个 ID 的计数/总和:

type        date        id   percent
expired 2019-11-09 62 16.85%
2019-11-16 87 21.70%
2019-11-23 26 9.85%
multi 2019-11-09 10 2.72%
2019-11-16 14 3.49%
2019-11-23 8 3.03%
single 2019-11-09 296 80.43%
2019-11-16 300 74.81%
2019-11-23 230 87.12%

感谢您的帮助!

重现数据帧的代码:

l = [{'type': 'expired', 'date': '09-11-2019', 'id': 62},
{'type': 'expired', 'date': '16-11-2019', 'id': 87},
{'type': 'expired', 'date': '23-11-2019', 'id': 26},
{'type': 'multi', 'date': '09-11-2019', 'id': 10},
{'type': 'multi', 'date': '16-11-2019', 'id': 14},
{'type': 'multi', 'date': '23-11-2019', 'id': 8},
{'type': 'single', 'date': '09-11-2019', 'id': 296},
{'type': 'single', 'date': '16-11-2019', 'id': 300},
{'type': 'single', 'date': '23-11-2019', 'id': 230}]

weekdf = pd.DataFrame(l)
weekdf['date'] = pd.to_datetime(weekdf['date'])
weekdf = weekdf.set_index(['type','date'])
print(weekdf)

最佳答案

您可以使用df.index.get_level_values获取 multiindex 第一级的值,然后获取周和组:

weekdf['percent'] = (weekdf['id'].div(weekdf.groupby(weekdf.index.get_level_values(-1).week)
['id'].transform('sum')).mul(100).round(2).astype(str).add('%'))
print(weekdf)
<小时/>
                     id percent
type date
expired 2019-09-11 62 16.85%
2019-11-16 87 21.7%
2019-11-23 26 9.85%
multi 2019-09-11 10 2.72%
2019-11-16 14 3.49%
2019-11-23 8 3.03%
single 2019-09-11 296 80.43%
2019-11-16 300 74.81%
2019-11-23 230 87.12%

关于python - 获取 Pandas 的每周百分位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935719/

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