将 pandas 数据框除以其索引列和行的总和

这是我目前拥有的:


    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


守候你守候我
浏览 122回答 3
3回答

慕勒3428872

IIUC,尝试:a = np.diag(df)[None, :]b = np.diag(df)[:, None]c = a+bnp.fill_diagonal(c, np.diag(df))df_out = df.div(c)df_out输出:          10        25        2610  1.000000  0.001692  0.05348825  0.001692  1.000000  0.15601026  0.053488  0.156010  1.000000

呼唤远方

我认为这是解决方案,但您必须更改列和索引。import pandas as pddf = 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

慕尼黑的夜晚无繁华

您可以将行除以列中的最大值来重现您的示例。 df1 = pd.DataFrame({    "column1": df['10'].divide(df['10'].max()),    "column2": df['25'].divide(df['25'].max()),    "column3": df['26'].divide(df['26'].max())})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python