Выбор значений из одного и того же кадра данных, но для разных лет - PullRequest
0 голосов
/ 02 октября 2018

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

feature    year
value1     2001
value1     2008  
vlaue2     1996 

и т. Д.

например, я хочу сравнить value1(2008) с value1(2008 - 7) и т. Д., Также должны быть некоторые условные выражения, поскольку год 2000 нельзя сравнить с (2000-7= 1993), поскольку, например, для года (1993) не существует значения.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

С учетом предоставленной вами минимальной информации это можно использовать в качестве решения:

Давайте создадим функцию для получения данных за оба года, если таковые имеются.

def compare(x):
    f1 = df.loc[df['year'] == x, 'feature'].values[0]
    y2 = x - 7
    if y2 in df['year'].unique():
        f2 = df.loc[df['year'] == y2, 'feature'].values[0]
        return (x, f1, y2, f2)
    else:
        pass

ПрименитеФункция для столбца года и назначить новое имя фрейма данных.

foo = df['year'].apply(compare)

Создать фрейм данных с ненулевыми значениями в foo:

bar = pd.DataFrame(data = list(foo.loc[~foo.isnull()]), columns = ['f1', 'y1', 'f2', 'y2'])

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

0 голосов
/ 02 октября 2018

Вот быстрое решение из того, что я понимаю из вашего вопроса,

import numpy as np
import pandas as pd

data = {'feature': ['A', 'B', 'C', 'A'],
        'value': [1, 10, 3, 50],
        'year':[2001, 2002, 2003, 2008]}

df = pd.DataFrame(data)

def compFeature(df, f, y):
    if df[(df.feature == f) & (df.year == (y-7))].year is not None:
        now = df[(df.feature == f) & (df.year == y)].value
        old = df[(df.feature == f) & (df.year == (y-7))].value
        result = np.subtract(now,old)
    else:
        result = np.nan

    return result

Это только для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...