我在下面有这张桌子
我想基于ID列创建一个新的列“ cap”。
步骤:
获取所有唯一ID值及其计数
如果计数大于或等于4,则返回A
如果计数大于2且小于4,则返回B
如果计数小于或等于2,则返回C
我需要一种解决上述问题的新方法
这是我尝试的操作,尽管遇到错误。
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])