Как найти сумму значений для каждой строки каждого объекта?
У меня есть список некоторых значений. Мне нужно дополнить этот список разностью значения с предыдущим, а также и суммой этих разностей. При этом, для разных названий сумму нужно обнулять.
Т.к. не могу особо понятно сформулировать, в комментариях к списку написал, чем нужно дополнить каждое значение:
import pandas as pd
data = [
['10:00', 'a', 110], # += [0, 0]
['11:00', 'a', 130], # += [20, 20]
['12:00', 'a', 145], # += [15, 35]
['13:00', 'a', 165], # += [20, 55]
['10:00', 'b', 110], # += [0, 0]
['11:00', 'b', 230], # += [120, 120]
['12:00', 'b', 345], # += [115, 235]
['13:00', 'b', 465], # += [120, 355]
['10:00', 'c', 10], # += [0, 0]
['11:00', 'c', 20], # += [10, 10]
['12:00', 'c', 30], # += [10, 20]
['13:00', 'c', 35], # += [5, 25]
['10:00', 'd', 1], # += [0, 0]
['11:00', 'd', 2], # += [1, 1]
['12:00', 'd', 3], # += [1, 2]
['13:00', 'd', 4], # += [1, 3]
]
df = pd.DataFrame(data, columns=['time', 'name', 'value'])
df.loc[df.name != df.name.shift(), 'diff_value'] = 0
df.loc[df.name == df.name.shift(), 'diff_value'] = df.value.diff()
print(df)
Дополнить разностью несложно, но как найти сумму этих разностей?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь DataFrameGroupBy.cumsum():
df["new"] = df.groupby("name")["diff_value"].cumsum()
результат:
In [131]: df
Out[131]:
time name value diff_value new
0 10:00 a 110 0.0 0.0
1 11:00 a 130 20.0 20.0
2 12:00 a 145 15.0 35.0
3 13:00 a 165 20.0 55.0
4 10:00 b 110 0.0 0.0
5 11:00 b 230 120.0 120.0
6 12:00 b 345 115.0 235.0
7 13:00 b 465 120.0 355.0
8 10:00 c 10 0.0 0.0
9 11:00 c 20 10.0 10.0
10 12:00 c 30 10.0 20.0
11 13:00 c 35 5.0 25.0
12 10:00 d 1 0.0 0.0
13 11:00 d 2 1.0 1.0
14 12:00 d 3 1.0 2.0
15 13:00 d 4 1.0 3.0