【问题标题】:Apply Function With Multiple Arguments to Pandas Dataframe将具有多个参数的函数应用于 Pandas 数据框
【发布时间】:2021-06-26 21:59:40
【问题描述】:

如何将具有多个参数的函数应用于数据框?我的功能是这样的:

def test(a,b,c,d,e,f):
    if b == 1 :
        if d == 0 :
            return a-f
    if b == 0 :
        if c == 1 :
            return a-e

我的示例数据是这样的:

a b c d e f
2021-04-29 22:04:000 1 0.0 0.0 2021-04-28 10:10:00 2021-04-29 23:14:00
2021-06-10 06:00:00 0 1.0 1.0 2021-06-09 23:00:00 2021-06-11 00:29:00
2021-06-09 23:00:00 1 0.0 0.0 2021-06-06 11:00:00 2021-06-10 06:00:00
2021-06-06 11:00:00 0 1.0 1.0 2021-06-06 08:00:00 2021-06-09 23:00:00
2021-06-06 08:00:00 1 0.0 0.0 2021-06-06 04:00:00 2021-06-06 11:00:00

我尝试了这行代码,然后显示错误: 代码:

df['dt'] = df.apply(test, args=('a','b','c','d','e','f'), axis=1)

错误:

test() takes 6 positional arguments but 7 were given

我不明白为什么在我的代码中只有 6 个参数时它检测为 7 个参数。

【问题讨论】:

  • 第一个参数总是用行填充,任何作为args 传递的值都是额外的。在这种情况下,您已将文字字符 a-f 作为附加参数传递。

标签: python pandas function datetime arguments


【解决方案1】:

您可以尝试像这样更改您的功能:

def test(row):
    a,b,c,d,e,f = row
    if b == 1 :
        if d == 0 :
            return a-f
    if b == 0 :
        if c == 1 :
            return a-e

然后像这样修改你应用函数的方式:

df['dt'] = df.apply(test, axis=1)

【讨论】:

  • 列顺序不同、名称不同、参数之间有其他列如何应用?
  • 列的名称没有区别,因为test() 将每一行解压缩为 6 个变量。 a 行的值将进入变量a,b 行的值将进入变量b,以此类推。 @RidwanNurzeha
  • 也就是说,我必须匹配函数和数据框之间的列顺序和列数?
  • 我才意识到我说错了,我的意思是说“column a 的值将进入变量 a,column的值> b,将进入变量 b..." 等。但是是的,用于解压缩行的变量数必须与数据框中的顺序和列数匹配。 @RidwanNurzeha
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多