【问题标题】:Passing Tuple to a function via apply通过应用将元组传递给函数
【发布时间】:2021-02-16 00:54:07
【问题描述】:

我正在尝试运行下面需要两点的函数..

point A=(2,3)
point B=(4,5

def Somefunc(pointA, point B):
     x= pointA[0] + pointB[1]
     
  return x

现在,当尝试基于此功能创建单独的列时,它会向我抛出 cannot convert the series to <class 'float'> 之类的错误,所以我尝试了这个

df['T']=df.apply(Somefunc((df['A'].apply(lambda x: float(x)),df['B'].apply(lambda x: float(x))),\
                 (df['C'].apply(lambda x: float(x)),df['D'].apply(lambda x: float(x)))),axis=0))

下面的示例数据框;

A B C D
1 2 3 5
2 4 7 8
4 7 9 0

任何帮助将不胜感激。

【问题讨论】:

  • 尝试在您的函数return float(x) 中进行浮点转换,并在应用您的 lambda 函数时将其关闭
  • 为什么有这么多应用函数嵌套在一起,这会让我做噩梦。你希望你的结果是什么样的?
  • 抱歉,但我尝试了不同的方法,但似乎可以得到输出。结果将是基于函数结果的新列。问题是函数要求 A 点,但实际上它是两个单独的列点 A=(A,B) 的组合,同样点 B=(C,D)
  • @ShahrukhKhalidi 不用担心,我现在编辑了原始答案,现在我现在正在尝试执行此操作。

标签: pandas function tuples


【解决方案1】:

这是我能做出的关于你想要做什么的最佳猜测:

df['T']=df.apply(lambda row: [(row['A'],row['B']),(row['C'],row['D'])],axis=1)

编辑:应用您的功能;

df['T'] = df.apply(lambda row: SomeFunc((row['A'],row['B']),(row['C'],row['D'])),axis=1)

话虽如此,同样的结果可以更快、更习惯地实现,如下所示:

>>> df
   A  B  C  D
0  2  7  3  3
1  3  1  5  7
2  2  0  6  2
3  3  9  5  9
4  0  2  3  7
>>> df['T']=df.apply(tuple,axis=1)
>>> df
   A  B  C  D             T
0  2  7  3  3  (2, 7, 3, 3)
1  3  1  5  7  (3, 1, 5, 7)
2  2  0  6  2  (2, 0, 6, 2)
3  3  9  5  9  (3, 9, 5, 9)
4  0  2  3  7  (0, 2, 3, 7)

【讨论】:

  • @ShahrukhKhalidi 不用担心!仅供参考,按行应用:axis=1,按列应用:axis=0
猜你喜欢
  • 2023-03-14
  • 2010-09-29
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多