我正在尝试编写一个函数,该函数将一列作为输入并将其分为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个不同的数据框
答案 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;