我有一张桌子:
物体 | 第 1 栏 | 第 2 栏 | 第3栏 | 第 4 栏 |
---|---|---|---|---|
参考 | 10 | 0 | 7 | 0 |
对象1 | 14 | 9 | 1 | 30 |
对象2 | 1 | 16 | 0 | 0 |
对象3 | 9 | 21 | 3 | 17 |
对象4 | 11 | 0 | 4 | 22 |
我想按条件转换它:如果任何列的第一行=0,那么该列的其他行可以是0或1。如果当前值> 0,则变为1,如果是0,仍为 0。
结果表是:
物体 | 第 1 栏 | 第 2 栏 | 第3栏 | 第 4 栏 |
---|---|---|---|---|
参考 | 10 | 0 | 7 | 0 |
对象1 | 14 | 1 | 1 | 1 |
对象2 | 1 | 1 | 0 | 0 |
对象3 | 9 | 1 | 3 | 1 |
对象4 | 11 | 0 | 4 | 1 |
我尝试过这个变体:
for column in df:
df[column] = np.where((df[column][0] == 0) & (df[column] != 0), 1, 0)
但它会将所有列重置为零,其中第一行不等于 0。 我怎样才能正确地做到这一点?
您可以通过
df.iloc[0]
选择第一行,然后检查该行中哪些列相等 0
。然后更改特定列:
first_row = df.iloc[0]
zero_columns = first_row[first_row == 0].index
df.loc[:, zero_columns] = (df.loc[:, zero_columns] > 0).astype(int)
print(df)
打印:
Object Col1 Col2 Col3 Col4
0 reference 10 0 7 0
1 Obj1 14 1 1 1
2 Obj2 1 1 0 0
3 Obj3 9 1 3 1
4 Obj4 11 0 4 1