我正在尝试编写将列分为3部分的函数

时间:2019-10-12 22:39:15

标签: python pandas

我正在尝试编写一个函数,该函数将一列作为输入并将其分为short,medium和long三个部分,然后将它们作为列表返回。

我尝试使用loc函数来执行此操作,但是,它返回的是数据框而不是列表。

def ifOrNot():
    retirementAge = 65
    name = getName()
    age = getAge()
    if (age >= retirementAge):
        print("Hello  ", name, ", are you in retirment age")
    else:
        timeToRetirement = retirementAge - age
        print("Hello ", getName(), " are you not in retirement age, you need to wait ", timeToRetirement, " more").

我期望得到3个不同的列表,但不幸的是我得到了3个不同的数据框

2 个答案:

答案 0 :(得分:0)

使用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()

答案 1 :(得分:0)

由于您使用的是熊猫,因此可以使用合并的概念。通过使用熊猫cut函数,您可以划分自己喜欢的范围,这使您的代码更易于阅读。更多信息here

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;