通过对象熊猫遍历小组



我需要一些大熊猫问题的帮助。

很多人要求拥有真实的输入和实际期望的输出以回答这个问题,因此它出现了:所以我有以下数据框

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

- 列%_cercises是列的值(cumulative_num_exercises/total_exercises(*100 - 列%_exercises_accum是每个月的%_cercises 总和的值。(请注意,在每个月结束时,它达到值100(。

- 我需要计算出这些数据,在每个月内进行总练习的50%,80%和90%的用户百分比。

- 为了这样做,我认为创建了一个称为类别的新列,后来将用于计算3个百分比中每个用户的贡献(50%,80%和90%(。类别列采用以下值:

  • 0如果用户做a%_ESCISES_ACCUM =0。

  • 1如果用户做了%_ESCERCISES_ACCUM<50和> 0。

  • 50如果用户做了a%_exercises_accum = 50。

  • 80如果用户做a%_exercises_accum = 80。

  • 90如果用户做a%_ESCISES_ACCUM =90。

等等,因为有很多情况是为了确定谁贡献了每个月练习总数的比例。

我已经确定了所有情况和必须采取的所有值。

基本上,我使用 for loop >两个主要的IFS

,我使用遍历数据框

if(df.iloc [i] [date] == df.iloc [i] [date] .shift(((:

计算以确定用户从第二行到同月的最后一行的百分比或百分比 (因为相同的用户可以贡献所有百分比,或者一个以上(

else:

计算以确定第一个练习的百分比每个成员月组贡献。

计算涉及:

  1. 使用Shift((。

  2. 查看上一行中类别列的值
  3. 在for内部循环时做

  4. 50%,但没有达到。例如,在这种情况下:

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

问题开头给定数据框的所需输出将包括与以前相同的列(日期,用户,cumulative_num_exercises,total_exercises,total_exercises,%_cercises和%_exercises_accum(加上类别列,这是:P>

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

请注意,带有值的行:508090或8090,意味着该用户正在贡献创建:

  1. 508090:一个月内总练习的50%,80%和90%。

  2. 8090:一个月内的80%和90%的练习。

有人知道如何通过对象遍历组的组来简化循环?

非常感谢!

没有理解您要完成的计算,这是我对您想要的最佳猜测。但是,我会重新获得Datanovice的观点,即获得答案的最佳方法是提供样本输出。

您可以使用以下代码切片到每个唯一日期:

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 ###

最新更新