【问题标题】:Pandas apply function on multiple columnsPandas 在多列上应用函数
【发布时间】:2023-04-08 17:29:02
【问题描述】:

我正在尝试将函数应用于数据框中的每一列,当我尝试仅对单个固定列名执行此操作时,它可以工作。我尝试在每一列上都这样做,但是当我尝试在函数中将列名作为参数传递时,我得到了一个错误。

如何正确传递参数以在数据框上应用函数?

def result(row,c):

     if  row[c] >=0 and row[c] <=1:
         return 'c'

     elif row[c] >1 and row[c] <=2:
         return 'b'

     else:
         return 'a'


cols = list(df.columns.values)

for c in cols

     df[c] = df.apply(result, args = (c),  axis=1)

TypeError: ('result() takes exactly 2 arguments (21 given)', u'occurred at index 0')

输入数据帧格式:

d = {'c1': [1, 2, 1, 0], 'c2': [3, 0, 1, 2]}
df = pd.DataFrame(data=d)
df
      c1   c2
0     1     3
1     2     0
2     1     1
3     0     2

【问题讨论】:

  • 这是一个虚拟函数还是实际函数?如果实际,我认为您不需要在这里申请。如果您可以分享一些预期的数据,我们可以提供帮助

标签: pandas function dataframe


【解决方案1】:

您无需传递列名即可应用。因为您只想检查列的值是否在特定范围内并且应该返回a, b or c。您可以进行以下更改。

def result(val):

     if  0<=val<=1:
         return 'c'
     elif 1<val<=2:
         return 'b'
     return 'a'


cols = list(df.columns.values)

for c in cols

     df[c] = df[c].apply(result)

请注意,这将替换您的列值。

更快的方法是np.select:

import numpy as np
values = ['c', 'b']
for col in df.columns:
    df[col] = np.select([0<=df[col]<=1, 1<df[col]<=2], values, default = 'a')

【讨论】:

  • 运行此程序时出现以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
  • 我的数据框都是浮点数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2017-08-02
  • 2021-02-11
  • 2019-06-04
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多