【问题标题】:Pandas apply() with axis=0 unexpected behaviour具有axis = 0意外行为的熊猫apply()
【发布时间】:2021-08-10 08:44:52
【问题描述】:

我在 pandas 中使用 .apply() 方法。使用axis=0 和axis=1 时,我得到相同的结果。

当使用 axis=0 时,我希望结果是一个包含四个元素(索引 A、B、C、D)的系列。谁能告诉我为什么轴参数在这种情况下不起作用?

我在下面添加了一个可重现的示例。 注意:我知道这只是一个简单的乘法,可以简单地使用方法 .mul() 或 * 运算符来完成,但我在这里使用是为了让事情变得简单。

from pandas import util
df = util.testing.makeDataFrame()
df.head()
A B C D
Z82iXpl5s4 0.6031287648192426 -0.8271966886193748 1.8008948949143067 2.3722926060057237
MIFRqMYUeQ 0.2607658354228718 -0.2475715926867064 0.9548749309163952 2.682513736796777
F5qTLNGXAL -1.0716656707592347 -0.637969249754201 -0.6155681669722803 1.24399654282517
5J4v4avVEB -0.9685885791255543 -0.6735886163824997 -0.8065978319692303 0.5227282727367413
uEeRVYkeWU -0.6661417878211171 -0.15444679388555943 -0.06476868167309932 -0.8541859423835071
df.apply(lambda x: x * 9, axis=0).head()
A B C D
Z82iXpl5s4 5.428158883373183 -7.444770197574373 16.20805405422876 21.35063345405151
MIFRqMYUeQ 2.3468925188058463 -2.2281443341803575 8.593874378247557 24.142623631170995
F5qTLNGXAL -9.644991036833112 -5.741723247787809 -5.540113502750523 11.195968885426531
5J4v4avVEB -8.717297212129989 -6.062297547442497 -7.259380487723073 4.704554454630672
uEeRVYkeWU -5.995276090390054 -1.3900211449700348 -0.5829181350578939 -7.687673481451564
df.apply(lambda x: x * 9, axis=1).head()
A B C D
Z82iXpl5s4 5.428158883373183 -7.444770197574373 16.20805405422876 21.35063345405151
MIFRqMYUeQ 2.3468925188058463 -2.2281443341803575 8.593874378247557 24.142623631170995
F5qTLNGXAL -9.644991036833112 -5.741723247787809 -5.540113502750523 11.195968885426531
5J4v4avVEB -8.717297212129989 -6.062297547442497 -7.259380487723073 4.704554454630672
uEeRVYkeWU -5.995276090390054 -1.3900211449700348 -0.5829181350578939 -7.687673481451564

【问题讨论】:

  • 为了更好地了解您有什么问题或意外,我正在复制 apply 函数的文档。 axis{0 or ‘index’, 1 or ‘columns’}, default 0 Axis along which the function is applied: 0 or ‘index’: apply function to each column. 1 or ‘columns’: apply function to each row. 我认为您的测试没有什么意外的。由于数据框的索引是第一列
  • “当使用 axis=0 时,我希望结果是一个包含四个元素(索引 A、B、C、D)的系列。”为什么?
  • 我想我将 .apply() 与 .groupby().apply() 混淆了。我现在看到了。这就是为什么我期待一个包含四个元素的系列。

标签: python pandas apply


【解决方案1】:

查看pandas.DataFrame.apply的文档:

axis : {0 or ‘index’, 1 or ‘columns’}, default 0
应用函数:

0 或“索引”:对每一列应用函数

1 或“列”:将函数应用于每一行。

Returns : Series 或 DataFrame 沿给定应用 func 的结果 DataFrame 的轴。

当您执行df.apply(lambda x: x * 9, axis=0) 时,每列中的值将乘以9,因此每列将有 4 个系列,并将它们分配回各自的索引。

为了更清楚,你可以尝试这样的事情:

df.apply(lambda x: [(x.round(0)*9).tolist()], axis=0).T

                                                   0
A  [18.0, 18.0, 0.0, -9.0, -9.0, -9.0, -0.0, -0.0...
B  [-9.0, -9.0, -9.0, -9.0, -0.0, -0.0, 9.0, -18....
C  [9.0, -9.0, 18.0, -0.0, 0.0, -9.0, -0.0, 0.0, ...
D  [9.0, 18.0, -9.0, 9.0, -9.0, 9.0, 9.0, -9.0, 0...

现在,您将看到这些单独的值。

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 2022-10-25
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2018-03-16
    • 2019-09-05
    相关资源
    最近更新 更多