Рассчитайте разницу между суммой часов в группе отметок времени и фиксированным числом - PullRequest
1 голос
/ 04 ноября 2019

У меня есть следующий фрейм данных. Я пытаюсь добиться того, чтобы для каждого «Date_worked» сумма часов в столбце «Time_spent» равнялась 7. Например, 6/10/2019 сумма часов уже равна 7, поэтому ничего не нужнобыть скорректированным. 6/12/2019 сумма часов равна 4,25, поэтому мне нужно вставить строку с «Разницей» в Tab_description, которая будет отображаться как разница 2,75 в поле «Время_расхода». 13.06.2009 и 14.06.2009 уже составляют 7, поэтому ничего тут не нужно делать. В случае с 19.06.2009 мне нужно сделать то же самое, что и в 12.06.2009, вставить строку с суммой 6, чтобы общая сумма достигла 7. Спасибо за вашу помощь.

Date_worked Tab_description Time_spent
    0   6/10/2019   Perform planning procedures 7.0
    1   6/11/2019   Perform planning procedures 7.0
    2   6/12/2019   Time off (away from the office) 2.25
    3   6/12/2019   Staff meeting   1.0
    4   6/12/2019   Accounting & Risk Management Luncheon   1.0
    5   6/13/2019   Perform planning procedures 7.0
    6   6/14/2019   Time off (away from the office) 2.0
    7   6/14/2019   Review policies and procedures  5.0
    8   6/17/2019   Time off (away from the office) 7.0
    9   6/18/2019   Perform planning procedures 7.0
    10  6/19/2019   Staff meeting   1.0
    11  6/20/2019   Time off (away from the office) 2.0
    12  6/21/2019   Time off (away from the office) 1.0
    13  6/24/2019   Staff meeting (FY 20 planning)  7.0
    14  6/25/2019   FCR Kick-off meeting    1.0
    15  6/26/2019   Time off (away from the office) 1.5
    16  6/26/2019   Staff meeting   1.0
    17  6/28/2019   Time off (away from the office) 1.0

1 Ответ

1 голос
/ 04 ноября 2019

Есть много способов сделать это, я покажу вам, используя groupby & concat.

Сначала позвольте нам вычислить общее время и разницу,

print(df)
      Date_worked                           Tab_description  Time_spent
0    6/10/2019              Perform planning procedures         7.00
1    6/11/2019              Perform planning procedures         7.00
2    6/12/2019          Time off (away from the office)         0.25
3    6/12/2019                          Staff meeting           1.00
4    6/12/2019  Accounting & Risk Management Luncheon           1.00
5    6/13/2019              Perform planning procedures         7.00
6    6/14/2019          Time off (away from the office)         2.00
7    6/14/2019          Review policies and procedures          5.00
8    6/17/2019          Time off (away from the office)         7.00
9    6/18/2019              Perform planning procedures         7.00
10   6/19/2019                          Staff meeting           1.00
11   6/20/2019          Time off (away from the office)         2.00
12   6/21/2019          Time off (away from the office)         1.00
13   6/24/2019                        Staff meeting (FY         7.00
14   6/25/2019                  FCR Kick-off meeting            1.00
15   6/26/2019          Time off (away from the office)         1.50
16   6/26/2019                          Staff meeting           1.00
17   6/28/2019          Time off (away from the office)         1.00

мы начинаем с groupby и простой разностной суммы, мы назначаем ее новой переменной с именем df2.

df2 = df.groupby('Date_worked')['Time_spent'].sum().reset_index()
df2['variance'] = df2['Time_spent'] - 7.00

Теперь мы создаем столбец вкладки и создаем запрошенное вами описание,

df2.loc[df2['variance'] != 0, 'Tab_description'] = 'Difference'

Затем мы отбрасываем любые строки NaN, отбрасываем столбец 'Time_spent' и переименовываем столбец «Дисперсия» в временную задержку в пределах concat.

pd.concat(
    [
        df,
        df2.dropna()
        .drop("Time_spent", axis=1)
        .rename(columns={"variance": "Time_spent"}),
    ],
    sort=False,
)
print(df)


  Date_worked                           Tab_description  Time_spent
0    6/10/2019              Perform planning procedures         7.00
1    6/11/2019              Perform planning procedures         7.00
2    6/12/2019          Time off (away from the office)         0.25
3    6/12/2019                          Staff meeting           1.00
4    6/12/2019  Accounting & Risk Management Luncheon           1.00
5    6/13/2019              Perform planning procedures         7.00
6    6/14/2019          Time off (away from the office)         2.00
7    6/14/2019          Review policies and procedures          5.00
8    6/17/2019          Time off (away from the office)         7.00
9    6/18/2019              Perform planning procedures         7.00
10   6/19/2019                          Staff meeting           1.00
11   6/20/2019          Time off (away from the office)         2.00
12   6/21/2019          Time off (away from the office)         1.00
13   6/24/2019                        Staff meeting (FY         7.00
14   6/25/2019                  FCR Kick-off meeting            1.00
15   6/26/2019          Time off (away from the office)         1.50
16   6/26/2019                          Staff meeting           1.00
17   6/28/2019          Time off (away from the office)         1.00
2    6/12/2019                                Difference       -4.75
7    6/19/2019                                Difference       -6.00
8    6/20/2019                                Difference       -5.00
9    6/21/2019                                Difference       -6.00
11   6/25/2019                                Difference       -6.00
12   6/26/2019                                Difference       -4.50
13   6/28/2019                                Difference       -6.00
...