Получение пересечения подмножества многоиндексного фрейма данных из PandasPython

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

Сообщение Anonymous »

У меня есть несколько индексных df с месяцем, затем идентификаторами объектов и значением TotalSpend для каждого объекта. Я пытаюсь агрегировать общие расходы по всем учреждениям за квартал, где есть данные за все 3 месяца квартала И за все 3 месяца квартала предыдущего года.
< img alt="введите описание изображения здесь" src="https://i.sstatic.net/Di3fCQ4E.png" />
В моем примере данных я попытался получить подмножество Апрель, май и июнь из df, а затем выполняю внутреннее соединение, но когда я пытаюсь это сделать, я получаю сообщение об ошибке, что это не df, а df, который мне дает использование df.loc[[date]]. По сути, я хотел бы проверить, какие идентификаторы объектов отображаются за все 3 месяца квартала, и сохранить только эти значения.
Желаемый результат:
Желаемый результат Выходными данными будут сумма расходов во втором квартале 2024 года по всем учреждениям, по которым есть данные за все три месяца второго квартала 2024 года, а затем сумма расходов во втором квартале 2023 года по всем этим же учреждениям.
В данном случае будет только Объект 1, поэтому сумма за второй квартал 2024 года составит 450, а сумма за первый квартал 2024 года — 300.
[img]https://i.sstatic .net/6GUWEfBM.png[/img]

Код:
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'))

#this is where i'm having issues
cur_data =df.loc[[cur_dates[1]]].join(df.loc[[cur_dates[1]]], on='FacilityID' ,join = "inner")
prev_data = df.loc[prev_dates[0]:prev_dates[-1]]

# print(cur_data)
# print(prev_data)

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


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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