Python 在旧数据帧上使用apply函数时,如何返回新数据帧?

Python 在旧数据帧上使用apply函数时,如何返回新数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,在旧数据帧上使用apply函数时,如何返回新数据帧 输入数据(df): 预订滚动\u表示滚动\u标准\u开发 ds城市 2013-01-01城市2 69南部 2013-01-02城市2 101楠楠 2013-01-03城市2 134 101.333333 32.501282 2013-01-04城市2 155 130.00000027.221315 2013-01-05城市2 104 131.000000 25.632011 代码: 输出: 问题: 上面的函数编译正确,没有错误。然而,当我尝试

在旧数据帧上使用apply函数时,如何返回新数据帧

输入数据(df):

预订滚动\u表示滚动\u标准\u开发
ds城市
2013-01-01城市2 69南部
2013-01-02城市2 101楠楠
2013-01-03城市2 134 101.333333 32.501282
2013-01-04城市2 155 130.00000027.221315
2013-01-05城市2 104 131.000000 25.632011

代码:

输出:

问题:

上面的函数编译正确,没有错误。然而,当我尝试运行它时,它并没有给我想要的输出。它不会在elif声明后打印任何内容,但它应该打印。另外,我不理解在输出的打印部分之后显示为所有非的数据帧。那是从哪里来的

我想要什么解决方案:


返回一个新的数据帧,其中包含满足elif语句的所有行。

当函数调用没有显式返回任何内容时,它将返回
None
(因为所有函数调用都必须返回Python中的内容,如果函数没有显式返回任何内容,则默认返回值为
None

这就是为什么您得到的数据帧为all
None
。我认为您无法通过
apply
实现您的目标,因为axis
1
apply()
实际上为每一行运行函数,并用返回值替换该行(如您案例中所见)

您试图做的事情可以使用矢量化的方式实现-

newdf = df.dropna()
result = newdf[(newdf['bookings'] - newdf['rolling_mean']) > (2 * newdf['rolling_std_dev'])]
解释-

  • -此函数用于删除任何包含
    NaN
    值的行
  • 下一行对序列进行布尔比较(对其每个元素进行相同的布尔比较,并返回一个布尔序列),然后执行
演示(我更改了一行,以便至少有一行符合条件)-


在新的数据帧中,您想要什么?您只是想删除其中包含
NaN
的行吗?人们多次向您解释,插入图像远不如插入文本有用,因为
read\u clipboard
对图像无效;这仍然是事实。FWIW,熊猫标签的许多追随者只是跳过了不符合a规则的问题。对不起,我不知道read_剪贴板是如何工作的。我修复了它,不再发布图片。在这个新的数据框中,我需要实现elif语句的行。您试图在函数中返回什么?目前我没有返回任何内容!这就是为什么我对输出感到困惑。它是带有apply函数的默认返回吗?我想返回一个新的dataframe,其中只包含满足elif语句的行。但是,即使打印在elif中也不起作用,因此elif中的返回x也不起作用。
newdf = df.dropna()
result = newdf[(newdf['bookings'] - newdf['rolling_mean']) > (2 * newdf['rolling_std_dev'])]
In [50]: df
Out[50]:
                   bookings  rolling_mean  rolling_std_dev
ds         city
2013-01-01 City_2        69           NaN              NaN
2013-01-02 City_2       101           NaN              NaN
2013-01-03 City_2       134    101.333333        32.501282
2013-01-04 City_2       155    130.000000        27.221315
2013-01-05 City_2      1000    131.000000        25.632011

In [51]: newdf = df.dropna()

In [52]: result = newdf[(newdf['bookings'] - newdf['rolling_mean']) > (2 * newdf['rolling_std_dev'])]

In [53]: result
Out[53]:
                   bookings  rolling_mean  rolling_std_dev
ds         city
2013-01-05 City_2      1000           131        25.632011