как создать новый столбец Python на основе пользовательской функции в другом столбце - PullRequest
0 голосов
/ 25 сентября 2018

Пожалуйста, я был бы признателен за любой вклад в эту проблему.

У меня есть эта таблица ниже

enter image description here

Я хочу создатьновый столбец "cap" на основе столбца ID.

шаги:Получить все уникальные значения идентификаторов с их количествомесли число больше или равно 4, вернуть Aесли число больше 2 и меньше 4, вернуть Bесли число меньше или равно 2, вернуть C

enter image description here

Мне нужен новый способ решения вышеуказанной проблемы

Это то, что я пробовал, хотя и получаю сообщение об ошибке.

cnt = pd.DataFrame(train['ID'].value_counts())

def cap_fnx(data, cnt):  
  for y in range(len(cnt['ID'].unique())):
    if data['ID'] == cnt.index[y]:
      if cnt.loc[y].ID >= 4:
        return 'A'
      if cnt.loc[y].ID > 2 and cnt.loc[y].ID < 4:
        return 'B'
      if cnt.loc[y].ID <= 2:
        return 'C'

train['cap'] = train.apply(cap_fnx, args=(cnt))

Это образец данных;

train = pd.DataFrame(columns=['ID','score'])
train.loc[0] = np.array([11, 0.11])
train.loc[1] = np.array([11,4.64 ])
train.loc[2] = np.array([12,3.39])
train.loc[3] = np.array([11,0.44 ])
train.loc[4] = np.array([17,4.83])
train.loc[5] = np.array([17,2.22])
train.loc[6] = np.array([11,1.18])
train.loc[7] = np.array([13,4.74])
train.loc[8] = np.array([12,2.13])
train.loc[9] = np.array([8,0.44])
train.loc[10] = np.array([17,1.73])
...