我有一个像这样的数据帧:
ID_USER CODE
0 433805 11.0
24 5448 44.0
48 3434 11.0
72 34434 11.0
96 3202 33.0
120 23766 33.0
153 39457 44.0
168 4113 33.0
172 3435 13.0
374 34093 11.0
我尝试将'CODE'列中的值替换为其他值。
11.0 and 44.0 -> 1 33.0 -> 0 all other -> 5
所以我做了以下其他事情:
df['CODE'] = df.apply(lambda s:func1(s))
def func1(x):
if (x['CODE'] == 11.0) or (x['CODE'] == 44.0):
return 1
elif (x['CODE'] == 33.0):
return 0
else:
return 5
我收到了这个错误:
KeyError: ('NTL', u'occurred at index ID_UC')
如何解决我的问题?
答案 0 :(得分:3)
您可以使用np.where
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
答案 1 :(得分:2)
简短回答是您忘记指定要应用的轴。默认情况下,apply
将遍历每一列。您的函数正在查找x['CODE']
,因此可以安全地假设您的意思是迭代行
df.apply(lambda s:func1(s), axis=1)
0 1
24 1
48 1
72 1
96 0
120 0
153 1
168 0
172 5
374 1
dtype: int64
你可以用
来缩短它df.apply(func1, 1)
那就是说,我会改进你的功能,假设你正在迭代pd.Series
而不是pd.DataFrame
和apply
的行到目标列。
def func2(x):
return 1 if (x == 11) or (x == 44) else 0 if (x == 33) else 5
df.CODE.apply(func2)
更好的是,我喜欢使用map
+ lambda
m = {11: 1, 44: 1, 33: 0}
df.CODE.map(lambda x: m.get(x, 5))
一起
df.assign(CODE=df.CODE.map(lambda x: m.get(x, 5)))
ID_USER CODE
0 433805 1
24 5448 1
48 3434 1
72 34434 1
96 3202 0
120 23766 0
153 39457 1
168 4113 0
172 3435 5
374 34093 1