为什么引用多列的Pandas“apply”函数不起作用?[闭门]

关闭。此问题不可复制,或由打字错误引起。它目前不接受答案。

<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)

发表评论