繁体   English   中英

根据 python 中列的条件更新行值

[英]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_dummiesdf.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM