关闭。此问题不可复制,或由打字错误引起。它目前不接受答案。
<hr class=“my12大纲无baw0 bb bc-POWER-400”/
想改进此问题吗?更新问题,使其成为堆栈溢出的主题。
两年前关闭
改进这个问题
在使用以下dataframe的多个列时,Pandas apply函数存在一些问题
df=DataFrame({‘a’:np.random.randn(6),
‘b’:[‘foo’,’bar’]*3,
‘c’:np.random.randn(6)})
和下面的函数
def my_测试(a、b):
返回%b
当我尝试应用此功能时:
df['Value']=df.apply(lambda行:my_测试(行[a],行[c]),轴=1)
我收到错误消息:
NameError:(“未定义全局名称'a',u'出现在索引0')
我不理解此消息,我正确定义了名称
我将非常感谢在这个问题上的任何帮助
更新
感谢您的帮助。我确实在代码中犯了一些语法错误,索引应该放在“”中。但是,使用更复杂的函数(例如:
def my_测试(a):
cum_diff=0
对于df.index()中的ix:
cum_diff=cum_diff+(a-df['a'][ix])
回差
似乎您忘记了字符串的'
[43]on
:df['Value']=df.apply(lambda行:my_测试(行['a'],行['c']),轴=1)
In[44]:df
Output[44]:
a b c值
0-1.674308 foo 0.343801 0.044698
1-2.163236巴-2.046438-0.116798巴
2-0.199115 foo-0.458050-0.199115
3 0.918646巴-0.007185巴-0.001006巴
4 1.336830 foo 0.534292 0.268245
5 0.976844巴-0.773630巴-0.570417巴
顺便说一句,在我看来,以下方式更优雅:
[53]on
:定义我的测试2(行):
..:返回行['a']%行['c']
....:
At[54]on:df['Value']=df.apply(my_test2,axis=1)