按对象遍历分组

2024-09-27 22:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助解决一些大熊猫的问题。你知道吗

为了回答这个问题,很多人都要求获得真实的投入和真实的期望产出,结果是: 所以我有下面的数据帧

Date          user  cumulative_num_exercises  total_exercises %_exercises   
2017-01-01     1            2                      7             28,57
2017-01-01     2            1                      7             14.28
2017-01-01     4            3                      7             42,85
2017-01-01     10           1                      7             14,28
2017-02-02     1            2                      14            14,28
2017-02-02     2            3                      14            21,42
2017-02-02     4            4                      14            28,57
2017-02-02     10           5                      14            35,71
2017-03-03     1            3                      17            17,64
2017-03-03     2            3                      17            17,64
2017-03-03     4            5                      17            29,41
2017-03-03     10           6                      17            35,29

%_exercises_accum
28,57
42,85
85,7
100
14,28
35,7
64,27
100
17,64
35,28
64,69
100

-列%\u exercises是该列的值(累计\u num\u exercises/总\u exercises)*100 -%\u exercises\u acum列是每个月%\u exercises之和的值。(请注意,在每个月底,它都会达到值100)。你知道吗

-我需要用这些数据计算每个月参与锻炼的用户的百分比,占锻炼总数的50%、80%和90%。你知道吗

-为了做到这一点,我想创建一个新的列,称为category,稍后将用于计算3个百分比(50%、80%和90%)中每个百分比的贡献用户数。“类别”列采用以下值:

  • 如果用户执行了%\u\u acum=0,则为0。

  • 1如果用户进行了%\u累计<;50和>;0。

  • 50如果用户做了%\u\u acum=50。

  • 80如果用户做了%\u\u acum=80。

  • 90如果用户做了%\u\u acum=90。

以此类推,因为有很多案例是为了确定谁对每个月锻炼总次数的贡献率。你知道吗

我已经确定了所有的案例和必须采取的所有价值观。你知道吗

基本上,我使用for循环和两个主ifs遍历数据帧:

如果(测向iloc[i] [日期]==测向iloc[i] [日期].shift()):

计算以确定用户从同一个月组的第二行到最后一行所贡献的百分比 (因为同一个用户可以贡献所有百分比,也可以贡献多个百分比)

其他:

计算以确定第一个练习的百分比 各成员 月组贡献。你知道吗

计算包括:

  1. 使用shift()查看前一行中category列的值。

  2. 在for中执行while循环,因为当一个用户突然达到一个很大的百分比时,我们需要返回同一个月的用户,并将其category\u列值更改为50,因为他们贡献了50%,但没有达到。例如,在这种情况下:

    累计%日期 2017-01-01 1,24 2017-01-01 3,53 2017-01-01 20,25 2017-01-01 55,5

问题开始处给定数据帧的所需输出将包括与之前相同的列(日期、用户、累计\u num \u练习、总计\u练习、%\u练习和%\u练习\u累计)以及类别列,如下所示:

category
50
50
508090
90
50
50
5080
8090
50
50
5080
8090

请注意,值为508090或8090的行表示该用户正在参与创建:

  1. 508090:一个月锻炼总量的50%、80%和90%。

  2. 8090:一个月锻炼的80%和90%。

有人知道如何通过逐个对象遍历一组对象的组来简化for循环吗?你知道吗

非常感谢!你知道吗


Tags: 数据对象用户forshift贡献类别num
1条回答
网友
1楼 · 发布于 2024-09-27 22:22:31

由于不知道你希望完成什么计算,这是我最好的猜测你在寻找什么。不过,我要再次重申Datanovice's point,获得答案的最佳方法是提供一个示例输出。你知道吗

您可以使用以下代码对每个唯一的日期进行切片:

dates = ['2017-01-01', '2017-01-01','2017-01-01','2017-01-01','2017-02-02','2017-02-02','2017-02-02','2017-02-02','2017-03-03','2017-03-03','2017-03-03','2017-03-03']
df = pd.DataFrame(
    {'date':pd.to_datetime(dates),
     'user': [1,2,4,10,1,2,4,10,1,2,4,10],
     'cumulative_num_exercises':[2,1,3,1,2,3,4,5,3,3,5,6],
     'total_exercises':[7,7,7,7,14,14,14,14,17,17,17,17]}
)

df = df.set_index('date')

for idx in df.index.unique():
    hold = df.loc[idx]

    ### YOUR CODE GOES HERE ###

相关问题 更多 >

    热门问题