我有一个带有两列(动词和出现)的DataFrame。我能够创建一个新列来确定动词的字符数(即长度):
df['length'] = df['verb'].str.len()
第二个要求是用文本创建一个新列。如果ocurrence
等于1,则写'Unique'
;如果ocurrence
小于或等于5,则写'Medium'
;否则'High'
...
...这是我到目前为止编写的代码...
df['class'] = 'Unique' if df['ocurrence'] == 1 else 'Medium' if df['ocurrence'] <= 5 else 'High'
...但是它不起作用。
答案 0 :(得分:1)
使用pd.cut
:
df['class'] = pd.cut(df.occurrence, bins=[0,1,5,np.inf], labels=['Unique','Medium','High'])
例如:
df = pd.DataFrame({'occurrence':np.random.randint(0,10,10)})
>>> df
occurrence
0 5
1 1
2 6
3 7
4 5
5 7
6 7
7 1
8 2
9 7
df['class'] = pd.cut(df.occurrence, bins=[0,1,5,np.inf], labels=['Unique','Medium','High'])
>>> df
occurrence class
0 5 Medium
1 1 Unique
2 6 High
3 7 High
4 5 Medium
5 7 High
6 7 High
7 1 Unique
8 2 Medium
9 7 High
答案 1 :(得分:0)
np.select
三元语句未向量化。使用Pandas时,应使用Pandas / NumPy方法进行列式操作。在这种情况下,您可以使用np.select
:
conditions = [df['occurrence'] == 1, df['occurrence'] <= 5]
choices = ['Unique', 'Medium']
df['class'] = np.select(conditions, choices, 'High')