当我尝试仅使用一个固定的列名称进行操作时,我尝试将功能应用于数据框中的每一列。我尝试在每一列上执行此操作,但是当我尝试将列名作为函数的参数传递时,出现错误。
您如何正确传递参数以将函数应用于数据框?
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
答案 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')