#python #pandas #dataframe #for-loop #if-statement
Вопрос:
Я считаю, что это простой вопрос для людей с определенным уровнем опыта работы с Python. У меня есть такой фрейм данных. Я хочу, чтобы, если сумма строк равна 0, значение диагонали изменилось на 1. Например, df. loc[2,2] и df.loc[3,3] стали 1.
У меня был такой код, но я знаю, что в строке if должно быть несколько проблем.
for i, j in zip(range(len(df.index)), range(len(df.columns))):
if i == j amp; df.iloc[[i]].sum(axis = 1) == 0:
df.loc[i, j] = 1
Ответ №1:
Предполагая, что у вас есть квадратный фрейм данных , мы можем создать логическую маску, которая представляет условие, при котором строки суммируются 0
, а затем использовать эту маску для обновления диагональных значений фрейма данных:
m = df.sum(1).eq(0)
df.values[m, m] = 1
1 2 3 4 5 6
1 0.997476 0.0 0.0 0.002414 0.000110 0.000000
2 0.000000 1.0 0.0 0.000000 0.000000 0.000000
3 0.000000 0.0 1.0 0.000000 0.000000 0.000000
4 0.000000 0.0 0.0 0.997281 0.002521 0.000173
5 0.000000 0.0 0.0 0.000693 0.999222 0.000054
6 0.000046 0.0 0.0 0.035641 0.964293 0.000000