熊猫在多列上应用功能

时间:2019-03-28 15:45:17

标签: pandas function dataframe

当我尝试仅使用一个固定的列名称进行操作时,我尝试将功能应用于数据框中的每一列。我尝试在每一列上执行此操作,但是当我尝试将列名作为函数的参数传递时,出现错误。

您如何正确传递参数以将函数应用于数据框?

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

1 个答案:

答案 0 :(得分:0)

您无需传递列名即可应用。因为您只想检查列的值是否在特定范围内,并且应该返回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')
相关问题