所以我有一个数据:
import pandas as pd
df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'score': [1, 3, 4, 5, 2]})我想根据“分数”栏中的条件创建一个新的列。
我就这样试过了
df['happiness'] = df['score']
def are_you_ok(df):
if df['happiness'] >= 4:
return 'happy',
elif df['happiness'] <= 2:
return 'sad',
else:
return 'ok'
df['happines'] = df['happiness'].apply(are_you_ok)
df但是,当我试图运行它时,我得到的只是:
TypeError: 'int' object is not subscriptable我能不能不使用这种带整数的函数?
发布于 2018-09-18 18:55:23
听起来你想要np.select从numpy
import numpy as np
conds = [df.score >=4, df.score <=2]
choices = ['happy', 'sad']
df['happiness'] = np.select(conds, choices, default='ok')
>>> df
name score happiness
0 Jason 1 sad
1 Molly 3 ok
2 Tina 4 happy
3 Jake 5 happy
4 Amy 2 sad注意:通过使用numpy (或pd.np,取决于导入熊猫的方式)而不是仅使用np,可以避免显式导入np。
发布于 2018-09-18 18:57:21
使用pd.cut
pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])
Out[594]:
0 sad
1 ok
2 ok
3 happy
4 sad
#df['yourcol']=pd.cut(df.score,[0,2,4,np.Inf],labels=['sad','ok','happy'])发布于 2018-09-18 18:57:48
问题是,apply将您的函数应用于列中的每个值。df不是are_you_ok内部的一个DataFrame,而是一个整数(在您的例子中)。自然,Python抱怨不能用['happiness']索引整数。
不过,您的代码很容易修复。只需重写are_you_ok,使其与整数参数一起工作。
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
...: 'score': [1, 3, 4, 5, 2]})
...:
In [3]: def are_you_ok(x):
...: if x >= 4:
...: return 'happy'
...: elif x <= 2:
...: return 'sad'
...: else:
...: return 'ok'
...:
In [4]: df['happiness'] = df['score'].apply(are_you_ok)
In [5]: df
Out[5]:
name score happiness
0 Jason 1 sad
1 Molly 3 ok
2 Tina 4 happy
3 Jake 5 happy
4 Amy 2 sadhttps://stackoverflow.com/questions/52392922
复制相似问题