У меня есть кадр данных, и я хотел бы получить суммирующие значения для каждой [группы] со значениями одной строки до («вычитание» и «добавление») и одной строки после («BEGUZE_UE») группы. (Группа может содержать разные строки, UE_1 не имеет значения).
Но я получаю неправильные результаты в «m_days». Спасибо за любую помощь.
DataFrame:
data = {'ATEXT': ['', 'CT', 'RT', '', '', '', '', 'CT', 'CT', 'CT', 'RT', '', '', '', 'CTS', 'CT',
'', 'CT', 'RT', 'RT', 'RT', 'CT', '', 'CT', 'RT', 'RT', '', '', 'CT', '', ''],
'BEGUZ_UE': [11.00, 23.00, 33.00, 15.00, 12.75, 19.75, 14.75, 23.00, 24.00, 24.00, 33.00, 15.00, 14.25, 13.00,
23.00, 24.00, 11.00, 23.00, 33.00, 24.00, 24.00, 24.00, 6.00, 23.00, 33.00, 24.00, 10.68,
21.00, 23.00, 12.75, 13.00],
'subtract': [00.00, 00.00, 00.00, 00.00, 00.00, 3.57, 00.00, 00.00, 00.00, 00.00, 00.00, 00.08, 00.00, 00.00,
00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00,
6.08, 00.00, 00.00, 00.00],
'add': [3.92, 00.00, 00.00, 00.00, 4.95, 00.00, 2.95, 00.00, 00.00, 00.00, 00.00, 00.00, 2.62, 1.92, 00.00,
00.00, 3.92, 00.00, 00.00, 00.00, 00.00, 00.00, 12.00, 00.00, 00.00, 00.00, 2.95, 00.00, 00.00, 4.95,
1.92],
'UE_1': ['', '', '', '', 12.67, 24.7, 11.18, '', '', '', '', '', 14.17, 15.62, '', '',
'', '', '', '', '', '', '', '', '', '', '', 23.95, '', '', 17.95]}
df = pd.DataFrame(data)
df
Используемый код:
m = df['ATEXT'].eq("")
cond = (~m) & m.shift(-1)
df['UE_more_days'] = (df['BEGUZ_UE'].mask(m)
.groupby(m.cumsum()).cumsum()
.where(cond)
).shift() # orginal ohne shift() hier
tmv = (df[['subtract', 'add']]
.shift()
.groupby(m.cumsum())
.transform('max')
.eval('add-subtract')
)
df['m_days'] = (df.groupby(m[::-1].cumsum())['BEGUZ_UE']
.transform('sum')
.add(tmv)
.where(cond)
.shift()
)
Результат:
ATEXT BEGUZ_UE subtract add UE_1 UE_more_days m_days
0 11.00 [-0.00] [3.92] NaN NaN
1 CT (23.00) -0.00 0.00 NaN NaN
2 RT (33.00) -0.00 0.00 NaN NaN
3 [15.00] -0.00 0.00 (56.0) [(74.92)] ok
4 12.75 -0.00 4.95 12.67 NaN NaN
5 19.75 -3.57 0.00 24.7 NaN NaN
6 14.75 [-0.00] [2.95] 11.18 NaN NaN
7 CT (23.00) -0.00 0.00 NaN NaN
8 CT (24.00) -0.00 0.00 NaN NaN
9 CT (24.00) -0.00 0.00 NaN NaN
10 RT (33.00) -0.00 0.00 NaN NaN
11 [15.00] -0.08 0.00 (104.0) [(118.38)] shold be 121.95
12 14.25 -0.00 2.62 14.17 NaN NaN
13 13.00 -0.00 1.92 15.62 NaN NaN
14 CTS 23.00 -0.00 0.00 NaN NaN
15 CT 24.00 -0.00 0.00 NaN NaN
16 11.00 -0.00 3.92 47.0 60.62 should be 59.92
17 CT 23.00 -0.00 0.00 NaN NaN
18 RT 33.00 -0.00 0.00 NaN NaN
19 RT 24.00 -0.00 0.00 NaN NaN
20 RT 24.00 -0.00 0.00 NaN NaN
21 CT 24.00 -0.00 0.00 NaN NaN
22 6.00 -0.00 12.00 128.0 137.92 ok
23 CT 23.00 -0.00 0.00 NaN NaN
24 RT 33.00 -0.00 0.00 NaN NaN
25 RT 24.00 -0.00 0.00 NaN NaN
26 10.68 -0.00 2.95 80.0 102.68 ok
27 21.00 -6.08 0.00 23.95 NaN NaN
28 CT 23.00 -0.00 0.00 NaN NaN
29 12.75 -0.00 4.95 23.0 32.62 shold be 29.67
30 13.00 -0.00 1.92 17.95 NaN NaN
Подробнее здесь: https://stackoverflow.com/questions/787 ... to-groupby
Суммировать по группам и добавлять или подстроку перед группировкой и добавлять строку после группировки ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Запрос Linq с внутренним объединением, множественной группировкой и минимумом-максимумом
Anonymous » » в форуме C# - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-