当前位置: 首页 > 面试题库 >

为什么我的Pandas的“应用”功能不能引用多个列?

奚无尘
2023-03-14
问题内容

当将多个列与以下数据框一起使用时,Pandas Apply函数存在一些问题

df = DataFrame ({'a' : np.random.randn(6),
                 'b' : ['foo', 'bar'] * 3,
                 'c' : np.random.randn(6)})

和以下功能

def my_test(a, b):
    return a % b

当我尝试使用以下功能时:

df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)

我收到错误消息:

NameError: ("global name 'a' is not defined", u'occurred at index 0')

我不明白此消息,我正确定义了名称。

非常感谢你在此问题上的任何帮助

更新资料

谢谢你的帮助。我确实在代码中犯了一些语法错误,索引应该放在’‘。但是,使用更复杂的功能仍然会遇到相同的问题,例如:

def my_test(a):
    cum_diff = 0
    for ix in df.index():
        cum_diff = cum_diff + (a - df['a'][ix])
    return cum_diff 

问题答案:

似乎你忘记了''你的字符串。

In [43]: df['Value'] = df.apply(lambda row: my_test(row['a'], row['c']), axis=1)

In [44]: df
Out[44]:
                    a    b         c     Value
          0 -1.674308  foo  0.343801  0.044698
          1 -2.163236  bar -2.046438 -0.116798
          2 -0.199115  foo -0.458050 -0.199115
          3  0.918646  bar -0.007185 -0.001006
          4  1.336830  foo  0.534292  0.268245
          5  0.976844  bar -0.773630 -0.570417

在我看来,顺便说一句,以下方式更为优雅:

In [53]: def my_test2(row):
....:     return row['a'] % row['c']
....:     

In [54]: df['Value'] = df.apply(my_test2, axis=1)


 类似资料:
  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:

  • 我在创建Azure函数时注意到,一个函数App可以有多个函数。 有人能给我解释一下这背后的原理吗? 我的猜测 - 由于函数应用决定了托管(应用服务计划或消耗计划),因此你可以在应用服务计划上有一个函数应用,然后在该函数应用内有多个函数共享同一应用服务计划。 但这在消费计划中没有意义,因为如果你有一个具有“消费”计划的功能应用程序,其中包含2个功能,这与将两个功能拆分为具有消费计划的2个功能应用程序

  • 问题内容: 抱歉,如果这是重复的,但是我还没有找到。为什么我不能用在我的定义列别名从当我使用 ? 考虑以下简单查询: 结果是一个错误: 无效的列名“ NewValue” 这是一个sql小提琴。(替换用的是麓的注释掉) 我知道我可以使用像 这里 在这种情况下,但实际上在查询比较复杂,我想保持它尽可能地易读。我是否必须改用子查询或CTE,如果是这样,为什么呢? *由于Mikael Eriksson注释

  • Pandas apply函数有一些问题,当使用以下数据帧的多列时

  • 我试图隐藏Actionbar并改用工具栏,但如果我更改Theme.appcompat.light.NoActionBar,它确实会隐藏,但应用程序在行setContentView(r.layout.activity_main)处崩溃; 尽管它确实使用getSupportActionBar()隐藏。hide();但我不能用这个代码 Toolbar Toolbar=(Toolbar)findViewB

  • fReceiveBuffer是否存在一个视频帧? 哦,这里是我的FFMPEG初始化代码,需要打开相关视频解码器:http://paste.ubuntu.com/12529760//