Полученный столбец DataFrame из другого столбца без записи цикла - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть 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 голосов
/ 22 ноября 2018

np.select

Тернарные операторы не векторизованы.С Pandas вы должны использовать методы Pandas / NumPy для столбчатых операций.В этом случае вы можете использовать np.select:

conditions = [df['occurrence'] == 1, df['occurrence'] <= 5]
choices = ['Unique', 'Medium']

df['class'] = np.select(conditions, choices, 'High')
0 голосов
/ 22 ноября 2018

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...