я пытаюсь написать функцию, которая делит столбец на 3 части - PullRequest
0 голосов
/ 13 октября 2019

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

Я пытался сделать это с помощью функции loc, но,однако, он возвращает фрейм данных, а не список.

def DivideColumns(df,col):
    mean = df[col].mean()
    maxi  = df[col].max()
    mini  = df[col].min()
    less = mean - (maxi-mini)/3
    more = mean + (maxi-mini)/3
    short = df.loc[df[col] < less]
    average = df.loc[df[col].between(df[col], less, more)]
    long = df.loc[df[col] > more]
    return short, average, long;

я ожидал получить 3 разных списка, но, к сожалению, я получил 3 разных фрейма

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Поскольку вы используете панд, вы можете использовать концепцию биннинга. Используя функцию pandas cut, вы можете делить нужные вам диапазоны, и это облегчает чтение вашего кода. Подробнее здесь

def DivideColumns(df,col):
    mean = df[col].mean()
    maxi  = df[col].max()
    mini  = df[col].min()
    less = mean - (maxi-mini)/3
    more = mean + (maxi-mini)/3

    # binning
    bins_values = [mini, less, more, maxi]
    group_names = ['short', 'avarage', 'long']
    bins = pd.cut(df[col], bins_values, labels=group_names, include_lowest=True )


    short = (df[col][bins == 'short']).tolist()
    average = (df[col][bins == 'avarage']).tolist()
    long = (df[col][bins == 'long']).tolist()
    return short, average, long;
0 голосов
/ 13 октября 2019

Используйте функцию tolist(), чтобы преобразовать панд dataframe в список.

short = df.loc[df[col] < less].values.tolist()
average = df.loc[df[col].between(df[col], less, more)].values.tolist()
long = df.loc[df[col] > more].values.tolist()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...