为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2023-09-26 14:33:04
这是我目前拥有的:    print(df)    10   25  2610  530  1   46  25  1    61  6126  46   61  330我如何将其转换为 df1 以便我们将行中的每个元素除以索引列的总和?df1 的输出应如下所示:df1:    10             25               2610  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        2610  1       0.0016    0.053425  0.0016  1         0.156026  0.0534  0.1560    1
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-09-26
?
呼唤远方

TA贡献1856条经验 获得超11个赞

我认为这是解决方案,但您必须更改列和索引。


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


查看完整回答
反对 回复 2023-09-26
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可以将行除以列中的最大值来重现您的示例。


 df1 = pd.DataFrame(

{

    "column1": df['10'].divide(df['10'].max()),

    "column2": df['25'].divide(df['25'].max()),

    "column3": df['26'].divide(df['26'].max())

}


)


查看完整回答
反对 回复 2023-09-26
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信