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

如何在数据框的每一行上应用函数?

严瑞
2023-03-14
问题内容

我是Python的新手,我不确定如何解决以下问题。

我有一个功能:

def EOQ(D,p,ck,ch):
    Q = math.sqrt((2*D*ck)/(ch*p))
    return Q

说我有数据框

df = pd.DataFrame({"D": [10,20,30], "p": [20, 30, 10]})

    D   p
0   10  20
1   20  30
2   30  10

ch=0.2
ck=5

chck是浮点类型。现在,我想将公式应用于数据帧的每一行,并将其作为额外的行“ Q”返回。一个示例(不起作用)将是:

df['Q']= map(lambda p, D: EOQ(D,p,ck,ch),df['p'], df['D'])

(仅返回“地图”类型)

在我的项目中,我将需要更多此类处理,并希望找到可行的方法。


问题答案:

以下应该工作:

def EOQ(D,p,ck,ch):
    Q = math.sqrt((2*D*ck)/(ch*p))
    return Q
ch=0.2
ck=5
df['Q'] = df.apply(lambda row: EOQ(row['D'], row['p'], ck, ch), axis=1)
df

如果您要做的只是计算某个结果的平方根,则使用np.sqrt矢量化的方法,它将大大加快速度:

In [80]:
df['Q'] = np.sqrt((2*df['D']*ck)/(ch*df['p']))

df
Out[80]:
    D   p          Q
0  10  20   5.000000
1  20  30   5.773503
2  30  10  12.247449

时机

对于3万行df:

In [92]:

import math
ch=0.2
ck=5
def EOQ(D,p,ck,ch):
    Q = math.sqrt((2*D*ck)/(ch*p))
    return Q

%timeit np.sqrt((2*df['D']*ck)/(ch*df['p']))
%timeit df.apply(lambda row: EOQ(row['D'], row['p'], ck, ch), axis=1)
1000 loops, best of 3: 622 µs per loop
1 loops, best of 3: 1.19 s per loop

您可以看到np方法快了约1900 X



 类似资料:
  • 问题内容: 我有一个熊猫DataFrame,其中包含多个列: 我想基于对数据框的每一行应用一个函数为此数据框创建两个新列。我不想多次调用该函数(例如,通过执行两次单独的调用),因为它占用大量计算资源。我尝试通过两种方式来执行此操作,但它们都不起作用: 使用: 我编写了一个函数,该函数接受a并返回我想要的值的元组: 尝试将此应用于DataFrame会出现错误: 然后,我将使用此问题中显示的方法将从返

  • 我在下面有一个函数来计算一个月有多少天 这个返回29 我的问题是,现在我有一个包含100(年、月)的数据帧 2012,2 2012,3 2013,1 2016,7 2015年4月 ... 我已经将数据帧定义为df['Year']和df['Month'],当我将这两个元素插入函数时 它告诉我ValueError:一个系列的真值是模糊的。使用a.empty、a.bool()、a.item()、a.an

  • 我想应用一个自定义函数并创建一个名为population2050的派生列,该列基于数据框中已经存在的两列。 当我运行上面的代码时,我得到一个错误。我是否没有正确使用“应用”功能?

  • 我是新来的Clojure和玩它的乐趣。 我正在阅读一个CSV文件,并希望对每一列应用一个不同的函数。什么是一个优雅的(既简洁又可读)方法来做到这一点?我探讨了两种方法: null 对于每一行... ...我想对每个元素应用一个不同的函数,得到这样的结果: 我要使用的函数是: null 使用此方法,我首先将每一行转换为一个映射: 编辑:并且我想获取此地图: 转换器也存储在映射中: 最后我会把数据放入

  • 我需要对R中数据帧每行的数据进行卡方检验。到目前为止,我有一个函数可以创建矩阵并对矩阵进行检验。当我手动将数据输入函数时,这工作得很好。 但是,我想做的是将此函数应用于数据框的每一行,使得 var1 是行 x 列 1,var2 是行 x 列 2,var3 是行 x 列 3,var4 是行 x 列 4。 我已经尝试了几种不同的应用程序()函数的方法,但是我找不到一种允许我按照我想要的方式从行中获取数

  • 我想在DataFrame的所有行上应用一个函数。例子: 想要的输出: Scala怎么能做到呢?我跟着这个,但没有运气。