#python #pandas #dataframe #for-loop #data-cleaning
#python #pandas #фрейм данных #for-цикл #очистка данных
Вопрос:
Вот что у меня сейчас есть:
print(df)
10 25 26
10 530 1 46
25 1 61 61
26 46 61 330
Как я могу преобразовать это в df1, чтобы мы делили каждый элемент в строке на сумму индексных столбцов? Вывод df1 должен выглядеть следующим образом:
df1:
10 25 26
10 530/(530) 1/(530 61) 46/(530 330)
25 1/(61 530) 61/(61) 61/(61 330)
26 46/(330 530) 61/(330 61) 330/(330)
print(df1)
10 25 26
10 1 0.0016 0.0534
25 0.0016 1 0.1560
26 0.0534 0.1560 1
Комментарии:
1. я не уверен, что вы делаете, но вы не делите на столбцы индекса
Ответ №1:
IIUC, попробуйте:
a = np.diag(df)[None, :]
b = np.diag(df)[:, None]
c = a b
np.fill_diagonal(c, np.diag(df))
df_out = df.div(c)
df_out
Вывод:
10 25 26
10 1.000000 0.001692 0.053488
25 0.001692 1.000000 0.156010
26 0.053488 0.156010 1.000000
Ответ №2:
Я думаю, что это решение, но вам нужно изменить свои столбцы и индексы.
import pandas as pd
df = pd.DataFrame({530: [530, 1, 46],
61: [1, 61, 61],
330: [46, 61, 330]},
index = [530, 61, 330])
for i in range(len(df)):
for j in range(len(df)):
if i == j:
df.iloc[i,j] = df.iloc[i, j] / df.index[i]
else:
df.iloc[i,j] = df.iloc[i,j] / (df.index[i] df.columns[j])
df
Ответ №3:
Вы можете разделить строки на максимальное значение в столбце, чтобы воспроизвести свой пример.
df1 = pd.DataFrame(
{
"column1": df['10'].divide(df['10'].max()),
"column2": df['25'].divide(df['25'].max()),
"column3": df['26'].divide(df['26'].max())
}
)