[英]Update row values based on condition on column in 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 的新手。 任何人都可以请帮忙。
预期的 output 将是这样的 -
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)
Output:
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
考虑df
:
In [1479]: df
Out[1479]:
ID ID_1 ID_2 ID_3 ID_4 ID_5 ID_6
0 ID_1 1.0 20.1 31.0 23.0 31.5 24.6
1 ID_2 3.0 1.0 23.0 90.0 21.5 24.6
2 ID_3 7.0 70.1 1.0 23.0 31.5 24.6
3 ID_4 9.0 90.1 43.0 1.0 61.5 24.6
4 ID_5 11.0 10.1 11.0 23.0 1.0 24.6
5 ID_6 7.0 20.1 31.0 33.0 87.5 1.0
将pd.get_dummies
与df.combine_first
一起使用:
In [1477]: import numpy as np
In [1497]: df.iloc[:, 1:] = pd.get_dummies(df['ID']).replace({0: np.nan, 1: 0}).combine_first(df.iloc[:, 1:])
In [1498]: df
Out[1498]:
ID ID_1 ID_2 ID_3 ID_4 ID_5 ID_6
0 ID_1 0.0 20.1 31.0 23.0 31.5 24.6
1 ID_2 3.0 0.0 23.0 90.0 21.5 24.6
2 ID_3 7.0 70.1 0.0 23.0 31.5 24.6
3 ID_4 9.0 90.1 43.0 0.0 61.5 24.6
4 ID_5 11.0 10.1 11.0 23.0 0.0 24.6
5 ID_6 7.0 20.1 31.0 33.0 87.5 0.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.