WedX - журнал о программировании и компьютерных науках

Панды - найдите значение на основе логических утверждений

Я использую этот набор данных для проекта. Я пытаюсь найдите общий выход для каждого инвертора за 34-дневный период набора данных (в основном используйте конечное и начальное значение, доступное для каждого инвертора). Я смог получить список инверторов, используя pd.unique() (на каждую солнечную электростанцию ​​приходится 22 инвертора.

У меня возникли проблемы с запросом данных total_yield для каждого инвертора. Вот что я пробовал:

def get_yields(arr: np.ndarray, df:pd.core.frame.DataFrame) -> np.ndarray:
    delta = np.zeros(len(arr))
    index =0
    for i in arr:
        initial = df.loc[df["DATE_TIME"]=="15-05-2020 02:00"]
        initial = initial.loc[initial["INVERTER_ID"]==i]
        initial.reset_index(inplace=True,drop=True)
        initial = initial.at[0,"TOTAL_YIELD"]
        final = df.loc[(df["DATE_TIME"]=="17-06-2020 23:45")]
        final = final.loc[final["INVERTER_ID"]==i]
        final.reset_index(inplace=True, drop=True)
        final = final.at[0,"TOTAL_YIELD"]

        delta[index] = final - initial
        index = index + 1
    return delta

Ссылка: arr — это массив инверторов, перечисленных ниже. df — это кадр данных генерации для каждого завода.
Проблема в том, что не у каждого инвертора есть точка данных для каждого интервала. Это заставляет эту функцию работать только для инверторов на первом заводе, а не на втором.

Мой второй подход заключался в том, чтобы сначала отфильтровать инвертор, а затем взять первую и последнюю точки данных. Но я получаю сообщение об ошибке- 'Series' objects are mutable, thus they cannot be hashed Вот код для этого:

def get_yields2(arr: np.ndarray, df: pd.core.frame.DataFrame) -> np.ndarry:
    delta = np.zeros(len(arr))
    index = 0
    for i in arr:
        initial = df.loc(df["INVERTER_ID"] == i)
        index += 1
        break
    return delta

Список инверторов на заводе 1 для справки (обозначен как SOURCE_KEY):

['1BY6WEcLGh8j5v7' '1IF53ai7Xc0U56Y' '3PZuoBAID5Wc2HD' '7JYdWkrLSPkdwr4'
 'McdE0feGgRqW7Ca' 'VHMLBKoKgIrUVDU' 'WRmjgnKYAwPKWDb' 'ZnxXDlPa8U1GXgE'
 'ZoEaEvLYb1n2sOq' 'adLQvlD726eNBSB' 'bvBOhCH3iADSZry' 'iCRJl6heRkivqQ3'
 'ih0vzX44oOqAx2f' 'pkci93gMrogZuBj' 'rGa61gmuvPhdLxV' 'sjndEbLyjtCKgGv'
 'uHbuxQJl8lW7ozc' 'wCURE6d3bPkepu2' 'z9Y9gH1T5YWrNuG' 'zBIq5rxdHJRwDNY'
 'zVJPv84UY57bAof' 'YxYtjZvoooNbGkE']

Список инверторов на заводе 2:

['4UPUqMRk7TRMgml' '81aHJ1q11NBPMrL' '9kRcWv60rDACzjR' 'Et9kgGMDl729KT4'
 'IQ2d7wF4YD8zU1Q' 'LYwnQax7tkwH5Cb' 'LlT2YUhhzqhg5Sw' 'Mx2yZCDsyf6DPfv'
 'NgDl19wMapZy17u' 'PeE6FRyGXUgsRhN' 'Qf4GUc1pJu5T6c6' 'Quc1TzYxW2pYoWX'
 'V94E5Ben1TlhnDV' 'WcxssY2VbP4hApt' 'mqwcsP2rE7J0TFp' 'oZ35aAeoifZaQzV'
 'oZZkBaNadn6DNKz' 'q49J1IKaHRwDQnt' 'rrq4fwE8jgrTyWY' 'vOuJvMaM2sgwLmb'
 'xMbIugepa2P7lBB' 'xoJJ8DcxJEcupym']

Большое спасибо.

13.12.2020

Ответы:


1

Я не могу загрузить набор данных, чтобы проверить это. Получение мая запрашивает ошибку.

Однако вы сможете сделать это с помощью файла groupby.

import pandas as pd
result = df.groupby('INVERTER_ID')['TOTAL_YIELD'].agg(['max','min'])
result['delta'] = result['max']-result['min']
print(result[['delta']])  
13.12.2020

2

Итак, если я правильно понимаю, вам нужно TOTAL_YIELD для каждого инвертора в начале периода времени, начиная с 5-05-2020 02:00 и заканчивая 17-06-2020 23:45. Попробуй это:

# enumerate lets you have an index value along with iterating through the array
for i, code in enumerate(arr): 
    # to filter the info to between the two dates, but not necessarily assuming that
    # each inverter's data starts and ends at each date
    inverter_df = df.loc[df['DATE_TIME'] >= pd.to_datetime('15-05-2020 02:00:00')]
    inverter_df = inverter_df.loc[inverter_df['DATE_TIME'] <= pd.to_datetime('17-06-2020      
    23:45:00')]
    inverter_df = inverter_df.loc[inverter_df["INVERTER_ID"]==code]]

    # sort by date
    inverter_df.sort_values(by='DATE_TIME', inplace= True)
    # grab TOTAL_YIELD at the first available date
    initial = inverter_df['TOTAL_YIELD'].iloc[0]
    # grab TOTAL_YIELD at the last available date
    final = inverter_df['TOTAL_YIELD'].iloc[-1]
    delta[index] = final - initial

13.12.2020
  • Благодарю за ваш ответ. Чтобы уточнить, я хочу, чтобы первое и последнее значение было доступно для каждого инвертора. 13.12.2020
  • Я только что запустил это и получаю ошибку типа: TypeError: '>=' not supported between instances of 'str' and 'Timestamp' 14.12.2020
  • @CharitarthChugh, вы можете преобразовать столбец DATE_TIME в datetime64[ns] с помощью df['DATE_TIME'] = pd.to_datetime(df['DATE_TIME']), который вы сможете сравнить с pd.to_datetime('17-06-2020 23:45:00') или любой другой датой, которую вы указали в этом формате. Он должен быть в состоянии правильно определить, какой формат является синтаксическим анализом, но в случае, если он не проверяет ссылка 14.12.2020
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]