Панды и запасы: от ежедневных значений (в столбцах) до ежемесячных значений (в строках)

Я уже делал то же самое, используя подзапросы. Поэтому, если ваша оригинальная таблица была вызвана StoreCountsByWeek, и у вас была отдельная таблица, в которой перечислены идентификаторы магазина, то она будет выглядеть так:

SELECT StoreID, 
    Week1=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=1),
    Week2=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=2),
    Week3=(SELECT ISNULL(SUM(xCount),0) FROM StoreCountsByWeek WHERE StoreCountsByWeek.StoreID=Store.StoreID AND Week=3)
FROM Store
ORDER BY StoreID

. Одно из преимуществ этого метода заключается в том, что синтаксис более понятен и это упрощает присоединение к другим таблицам, чтобы вывести другие поля в результаты.

Мои анонимные результаты заключаются в том, что выполнение этого запроса по нескольким тысячам строк завершено менее чем за одну секунду, и я на самом деле имеет 7 подзапросов. Но, как отмечается в комментариях, сделать это так дорого, поэтому будьте осторожны при использовании этого метода, если вы ожидаете, что он будет работать на больших объемах данных.

-1
задан koren maliniak 13 July 2018 в 08:14
поделиться

1 ответ

Итак, я нашел способ.

  1. перебирает каждый столбец
  2. groupby month
  3. , беря первое и последнее значение, которое у меня есть в этом месяце
  4. df_migdal = pd.DataFrame () для col в df_input.columns [0:]: stock_position = df_input.loc [:, col]
    name = stock_position.name
    name = re.sub('[^a-zA-Z]+', '', name)
    name = name[0:-4]
    
    
    stock_position=stock_position.groupby([pd.TimeGrouper('M')]).agg(['first', 'last'])
    
    stock_position["name"] = name
    stock_position["return"] = ((stock_position["last"] / stock_position["first"]) - 1) * 100
    stock_position.dropna(inplace=True)
    df_migdal=df_migdal.append(stock_position)
    df_migdal=df_migdal.round(decimals=2)
    

Я попытался сделать это более холодным способом, но не знал, как обрабатывать, мультииндекс, который я получил ... Мне нужно, чтобы для каждого столбца, чтобы взять два подколока и создать третий из некоторой лямбда-функции.

df_input.groupby([pd.TimeGrouper('M')]).agg(['first', 'last'])
0
ответ дан koren maliniak 17 August 2018 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: