gpt4 book ai didi

python - 根据唯一条目的数量按组计算比例

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:50 25 4
gpt4 key购买 nike

我有一些已识别的用户 (id) 在某些时间点使用服务。我正在尝试计算每天某种服务类型的用户比例。在此示例数据中,我只有一天,但如果有更多天,我想让代码以相同的方式工作。

day1 = 
datetime_idx type id
2016-03-01 05:04:00 C 1
2016-03-01 05:24:00 A 2
2016-03-01 05:29:00 C 3
2016-03-01 05:29:00 B 4
2016-03-01 05:35:00 D 1

day1_usage = day1.groupby('type').resample('D')['id'].nunique().reset_index()

这给了我以下信息:

     type datetime_idx   id
0 A 2016-03-01 1
1 B 2016-03-01 1
2 C 2016-03-01 2
3 D 2016-03-01 1

我试过这样得到比例:

day1_usage['ratio'] = (day1_usage.groupby(['type','datetime_idx'])['id'].transform(sum) / day1_usage.groupby('datetime_idx')['id'].transform(sum))

这是我得到的输出:

   type    datetime_idx     id  ratio 
0 A 2016-03-01 1 0.2
1 B 2016-03-01 1 0.2
2 C 2016-03-01 2 0.4
3 D 2016-03-01 1 0.2

但是我想要得到的输出是这样的:

   type    datetime_idx     id  ratio 
0 A 2016-03-01 1 0.25
1 B 2016-03-01 1 0.25
2 C 2016-03-01 2 0.5
3 D 2016-03-01 1 0.25

我的代码除以用户条目的总和,但我希望它除以唯一用户数。

最佳答案

编辑

import pandas as pd
import numpy as np
from io import StringIO

让我们尝试多天

csv_file = StringIO("""datetime_idx            type  id
2016-03-01 05:04:00 C 1
2016-03-01 05:24:00 A 2
2016-03-01 05:29:00 C 3
2016-03-01 05:29:00 B 4
2016-03-01 05:35:00 D 1
2016-03-03 05:04:00 C 1
2016-03-03 05:24:00 A 2
2016-03-03 05:29:00 C 3
2016-03-03 05:29:00 B 4
2016-03-03 05:35:00 D 1""")

days = pd.read_csv(csv_file,sep='\s\s+')

days['datetime_idx'] = pd.to_datetime(days.datetime_idx)

days = days.set_index('datetime_idx')

print(days)

type id
datetime_idx
2016-03-01 05:04:00 C 1
2016-03-01 05:24:00 A 2
2016-03-01 05:29:00 C 3
2016-03-01 05:29:00 B 4
2016-03-01 05:35:00 D 1
2016-03-03 05:04:00 C 1
2016-03-03 05:24:00 A 2
2016-03-03 05:29:00 C 3
2016-03-03 05:29:00 B 4
2016-03-03 05:35:00 D 1

days_usage = days.groupby('type').resample('D')['id'].nunique().to_frame()

days_usage

id
type datetime_idx
A 2016-03-01 1
2016-03-02 0
2016-03-03 1
B 2016-03-01 1
2016-03-02 0
2016-03-03 1
C 2016-03-01 2
2016-03-02 0
2016-03-03 2
D 2016-03-01 1
2016-03-02 0
2016-03-03 1

days_usage['ratio'] = (days_usage.unstack(0)
.div(days.resample('D')['id'].nunique(), axis='index')).fillna(0).stack().swaplevel(0,1)

print(days_usage)

输出:

                      id  ratio
type datetime_idx
A 2016-03-01 1 0.25
2016-03-02 0 0.00
2016-03-03 1 0.25
B 2016-03-01 1 0.25
2016-03-02 0 0.00
2016-03-03 1 0.25
C 2016-03-01 2 0.50
2016-03-02 0 0.00
2016-03-03 2 0.50
D 2016-03-01 1 0.25
2016-03-02 0 0.00
2016-03-03 1 0.25

关于python - 根据唯一条目的数量按组计算比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043146/

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