python - 如何用for循环和def函数替换列值?
问题描述
我想用 def 函数替换多列的列值。
If value > 8 = 100, if value > 6 = 0, if value < 7 = 0, if NaN = NaN
我的数据如下。
ID MONTH COUNTRY Brand A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
1 201906 USA Apple 10 7 10 0 NaN NaN NaN 10 NaN NaN
2 201906 USA Samsung 8 6 8 NaN NaN NaN NaN 9 NaN NaN
3 201906 USA Apple 10 7 10 NaN NaN 10 3 10 NaN NaN
4 201906 USA Samsung 9 5 10 NaN 1 NaN NaN NaN 7 4
5 201906 USA Apple 10 7 10 NaN NaN NaN NaN 10 NaN NaN
我尝试了下面的代码,但没有更改列值。
list = ['A1', 'A3', 'A4', 'A7', 'A10']
new_list = ['B1', 'B3', 'B4', 'B7', 'B10']
def f(x):
for i in list:
if x[i] > 8:
value = 100
elif x[i] > 6:
value = 0
elif x[i] < 7:
value = -100
else:
value = np.nan
return value
df[new_list] = df[list].apply(f, axis=1)
我怎么能这样?
解决方案
我建议不要在函数内部循环,而是将其移到外部并遍历列:
list = ['A1', 'A3', 'A4', 'A7', 'A10']
def f(x):
if x > 8:
value = 100
elif x > 6:
value = 0
elif x < 7:
value = -100
else:
value = np.nan
return value
for i in list:
df[i] = df[i].apply(f)
如果您想将更新后的值写入新列,您可以采用两种方法:
添加固定前缀:
for i in list:
df[i + '_updated'] = df[i].apply(f)
或者使用第二个列表来定义新的列名:
list_current = ['A1', 'A3', 'A4', 'A7', 'A10']
list_new = ['B1', 'B3', 'B4', 'B7', 'B10']
for i, j in zip(list_current, list_new):
df[j] = df[i].apply(f)`
推荐阅读
- c# - RESTful API 内置错误
- c# - 如何在 Unity 中列出房间?(双关语)
- scala - 当我使用 jsonPath 时,Gatling 冻结
- hyperledger - 如何部署具有多个验证器的超级账本锯齿网络?
- angular - 角度键值管道排序属性/按顺序迭代
- scala - scala- 从 S3 存储桶读取文件
- android - Android Studio 在 ubuntu 中构建错误,错误日志为“进程意外退出”
- sql-server - 带有中间记录的 SQL Server 最小值最大值
- webpack - 带有表达式的 ES6 动态导入
- xamarin - Xamarin Forms 使用 XAML 显示来自嵌入式资源的图像