Ежеквартально за квартал ежемесячные расходы на PandasPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ежеквартально за квартал ежемесячные расходы на Pandas

Сообщение Anonymous »

У меня есть некоторые данные о транзакциях, которые после группировки по дате и FacilityID выглядят так, как показано ниже. Я пытаюсь подсчитать изменение поквартально, то есть сумму общих расходов всех объектов, когда они потратили за все 3 месяца как текущего квартала, так и за 3 месяца квартала предыдущего года. Итак, в этом примере мне просто нужна сумма расходов для объекта № 1 за апрель-июнь 2024 года, а не сумма общих расходов объекта № 1 за апрель-июнь 2023 года, чтобы получить сдачу. Объект 2 следует исключить, поскольку в апреле 2023 или 2024 года у него не было расходов.
[img]https://i.sstatic.net /Wx8tueTw.png[/img]

Это код, который я пробовал до сих пор, но он также включает в код объект 2, хотя его следует исключить, поскольку он не включает есть данные за апрель 2024 и 2023 годов.
import pandas as pd
import datetime

def open_file(path, quarter_number, months):
df_raw = pd.DataFrame({'Date':["2024-04-01","2024-05-01","2024-06-01", "2024-06-01","2024-05-01","2023-04-01","2023-05-01","2023-06-01","2024-05-01","2024-06-01","2023-05-01","2023-06-01", "2023-04-01","2024-05-01","2024-06-01"],
'FacilityID': [1,1,1,1,1,1,1,1,2,2,2,2,3,4,4],
'TotalSpend': [100,110,120,50,70,90,100,110,150,140,120,60,90,190,150]
}).set_index('Date')
df = df_raw.groupby(['Date', 'FacilityID'])['TotalSpend'].sum()
print(df)

cur_dates = []
prev_dates = []

for month in months:
cur_date = datetime.date(2024, month, 1)
prev_date = datetime.date(cur_date.year - 1, month, 1)
cur_dates.append(cur_date.strftime('%Y-%m-%d'))
prev_dates.append(prev_date.strftime('%Y-%m-%d'))

cur_quarter_data = pd.concat(
[df.loc[date] if date in df.index.levels[0] else pd.Series(dtype='float64') for date in cur_dates])

prev_quarter_data = pd.concat(
[df.loc[date] if date in df.index.levels[0] else pd.Series(dtype='float64') for date in prev_dates])

common_facilities = cur_quarter_data.index.intersection(prev_quarter_data.index)

cur_quarter_vals = cur_quarter_data.loc[common_facilities]
prev_quarter_vals = prev_quarter_data.loc[common_facilities]

yoy_change = (cur_quarter_vals.sum() - prev_quarter_vals.sum()) / prev_quarter_vals.sum() * 100
return yoy_change

if __name__ == "__main__":
change = open_file("path",2 ,[4,5,6])
print(change)


Подробнее здесь: https://stackoverflow.com/questions/787 ... ith-pandas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Преобразование серии строк pandas в PeriodIndex, ежеквартально
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Преобразование серии строк pandas в PeriodIndex, ежеквартально
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Найти квартал по неделям на Java
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как мне получить квартал заданной даты?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Pandas Leetcode 1193. Ежемесячные транзакции I [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»