从其他列派生DataFrame列,而无需编写任何循环

时间:2018-11-21 23:15:39

标签: python pandas

我有一个带有两列(动词和出现)的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'

...但是它不起作用。

2 个答案:

答案 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')