Разделите фрейм данных pandas на сумму его индексного столбца и строки

#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())
}

)