python - 根据python中列的条件更新行值
问题描述
我有一个像这样的python数据框
ID ID_1 ID_2 ID_3 ID_4 ID_5
ID_1 1.0 20.1 31.0 23.1 31.5
ID_2 3.0 1.0 23.0 90.0 21.5
ID_3. 7.0 70.1 1.0 23.0 31.5
ID_4. 9.0 90.1 43.0 1.0 61.5
ID_5 11.0 10.1 11.0 23.0 1.0
我需要更新 COLUMN NAMES 等于 ID 值的值,然后将值设置为零。
例如,在第一行中,ID 值 (ID_1) 与第一列 ID_1 匹配,我需要将 1.0 的值重置为零,同样对于第二行,ID 值 (ID_2) 与第二列 ID_2 匹配并重置值1.0 到零。
我如何在 Python 中做到这一点?我对python很陌生。任何人都可以请帮忙。
预期的输出是这样的 -
ID ID_1 ID_2 ID_3 ID_4 ID_5
ID_1 0.0 20.1 31.0 23.1 31.5
ID_2 3.0 0.0 23.0 90.0 21.5
ID_3. 7.0 70.1 0.0 23.0 31.5
ID_4. 9.0 90.1 43.0 0.0 61.5
ID_5 11.0 10.1 11.0 23.0 0.0
解决方案
让我们尝试广播:
df[:] = np.where(df['ID'].values[:,None] == df.columns.values,0, df)
输出:
ID ID_1 ID_2 ID_3 ID_4 ID_5
0 ID_1 0.0 20.1 31.0 23.1 31.5
1 ID_2 3.0 0.0 23.0 90.0 21.5
2 ID_3 7.0 70.1 0.0 23.0 31.5
3 ID_4 9.0 90.1 43.0 0.0 61.5
4 ID_5 11.0 10.1 11.0 23.0 0.0
推荐阅读
- python - 使用 matplotlib 和 python 以非常低的分辨率存储图像的解决方法
- mysql - laravel 在多行和一个循环中从 API get 中插入数据
- javascript - 无法将函数传递给类构造函数
- python - 如何使嵌套的 if 语句正常工作?
- angular - 指令中的多个服务注入导致巨大的 CPU 负载
- python - 使用输入字段中的 __icontains 动态过滤
- python - 如何收集多个解决方案,Google OR-Tools,TSP
- celery - 为什么 Celery 队列随机卡在开始使用 Supervisord 上?
- python-3.x - 如何在dict列表中查找字符串作为键值的一部分?
- php - 如何比较mysql PHP中的两个时间列