Как рассчитать максимальный общий объем продаж за последний месяц данных в Python - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть одно имя информационного кадра как store_data.csv , содержащее тысячи данных в информационном кадре.Пример данных выглядит следующим образом:

Date       Store1   Store2   Store3   Store4
2018-06-01 2643     1642     2678     3050
2018-07-16 6442     5413     5784     7684
2018-07-24 4587     5743     3948     6124
2018-08-12 3547     8743     7462     8315

Как рассчитать, в каком магазине хранятся самые высокие общие продажи данных за последний месяц в python?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Это решение специфично для вашей проблемы и немного хакерское, но я проверил его, и, похоже, оно работает для меня.

Эта программа найдет магазин с наибольшим количеством продаж в течениепрошлый месяц.Эта программа предполагает, что месяцы приведены по порядку (данные не смешаны).Если это проблема, пожалуйста, измените вопрос, чтобы он был более конкретным, и я посмотрю, что я могу сделать.Одной из возможных реализаций этого является отслеживание каждого месяца с использованием dictionary, а затем доступ к данным за последний месяц, чтобы найти максимум.

import re

def get_highest_sales(filename):
    sales_during_month = [0, 0, 0, 0]
    with open(filename) as f:
        f.readline() # Skip first line
        prev_month = ""
        for line in f:
            cleaned = re.sub(" +", ' ', line)
            values = cleaned.split(' ')
            month  = values[0].split('-')[1]
            if not month == prev_month:
                prev_month = month
                sales_during_month = [0, 0, 0, 0]
            sales = [float(sale) for sale in values[1:]]
            for store,sale in enumerate(sales):
                sales_during_month[store] += sale

    return "Store: " + str(sales_during_month.index(max(sales_during_month)) + 1)
0 голосов
/ 17 сентября 2018

Сначала создайте DatetimeIndex:

#if necessary
#df = df.set_index('Date')
#df['Date'] = pd.to_datetime(df['Date'])

print (df)
            Store1  Store2  Store3  Store4
Date                                      
2018-06-01    2643    1642    2678    3050
2018-07-16    6442    5413    5784    7684
2018-08-10    4587    5743    3948    6124 <-change date for better sample
2018-08-12    3547    8743    7462    8315

print (df.index)
DatetimeIndex(['2018-06-01', '2018-07-16', '2018-08-10', '2018-08-12'], 
              dtype='datetime64[ns]', name='Date', freq=None)

Затем преобразуйте в месячный период в to_period:

df1 = df.set_index(df.index.to_period('M'))
print (df1)
         Store1  Store2  Store3  Store4
Date                                   
2018-06    2643    1642    2678    3050
2018-07    6442    5413    5784    7684
2018-08    4587    5743    3948    6124
2018-08    3547    8743    7462    8315

Фильтруйте по последнему значению, sum и последний получит имя столбца по максимальному значению Series.idxmax:

print (df1.loc[df1.index[-1]].sum())
Store1     8134
Store2    14486
Store3    11410
Store4    14439
dtype: int64

out = df1.loc[df1.index[-1]].sum().idxmax()
print (out)
Store2

Спасибо, @Jon Clements за другое решение:

out = df.last('M').resample('M').sum().T.idxmax()
#if need scalar output
out = df.last('M').resample('M').sum().iloc[0].idxmax()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...