У меня есть набор данных, содержащий значения данных, связанные со временем (среди других категорий), и я хотел бы добавить столбец накопленных значений, то есть сумму всех значений до и включая время.Итак, взяв что-то вроде этого:
ID YEAR VALUE
0 A 2018 144
1 B 2018 147
2 C 2018 164
3 D 2018 167
4 A 2019 167
5 B 2019 109
6 C 2019 183
7 D 2019 121
8 A 2020 136
9 B 2020 187
10 C 2020 170
11 D 2020 188
и добавив столбец, подобный этому:
ID YEAR VALUE CUMULATIVE_VALUE
0 A 2018 144 144
1 B 2018 147 147
2 C 2018 164 164
3 D 2018 167 167
4 A 2019 167 311
5 B 2019 109 256
6 C 2019 183 347
7 D 2019 121 288
8 A 2020 136 447
9 B 2020 187 443
10 C 2020 170 517
11 D 2020 188 476
Где, например, в строке 7 CUMULATIVE_VALUE является суммой 2 VALUE для ID = "D "в 2018 и 2019 годах (и не 2020).
Я смотрел на cumsum()
, но не вижу, как я мог бы использовать его в этом конкретном случае, поэтому лучшеЯ придумал вот что:
import numpy as np
import pandas as pd
np.random.seed(0)
ids=["A","B","C","D"]
years=[2018,2019,2020]
df = pd.DataFrame({"ID": np.tile(ids, 3),
"YEAR": np.repeat(years, 4),
"VALUE": np.random.randint(100,200,12)})
print(df)
df["CUMULATIVE_VALUE"] = None
for id in ids:
for year in years:
df.loc[(df.ID==id) & (df.YEAR==year), "CUMULATIVE_VALUE"] = \
df[(df.ID==id) & (df.YEAR <= year)].VALUE.sum()
print(df)
но я уверен, что должен быть лучший и более эффективный способ сделать это.Кто-нибудь?