gpt4 book ai didi

python - 如何将所选元素与行中的总和值相除,对角线 PANDAS 上的值除外

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:18 31 4
gpt4 key购买 nike

我在做一些统计。

我有数据框:

tag a   b    c   d   e   f   
a 5 2 3 2 0 1
b 2 4 3 2 0 1
c 3 4 3 2 0 3
d 2 4 3 2 0 1
e 0 4 3 2 0 8
f 1 4 3 2 0 1

我想创建新的数据框:

tag a   b    c   d   e   f   
a 0 x
b 0
c 0
d 0
e 0 Y
f 0

其中 x 等于该位置上的对应元素除以该行中元素的总和,对角线上的元素除外。所以 X 是:X = 2/(2+3+2+0+1)

例如 Y = 8/(0+4+3+2+8)

之后我需要再添加一列来计算: -sum[行中的每个元素 * 日志(该元素的)]

对于这个微不足道的问题,我很抱歉,我曾经在 R 中工作,而对于这个任务,我需要在 pandas 中工作。

最佳答案

使用np.fill_diagonal屏蔽对角线元素,然后使用DataFrame.div进行索引对齐除法:

u = df.set_index('tag')
np.fill_diagonal(u.values, 0)

v = u.div(u.sum(axis=1), axis=0)
v

a b c d e f
tag
a 0.00 0.250000 0.375000 0.250000 0.0 0.125000
b 0.25 0.000000 0.375000 0.250000 0.0 0.125000
c 0.25 0.333333 0.000000 0.166667 0.0 0.250000
d 0.20 0.400000 0.300000 0.000000 0.0 0.100000
e 0.00 0.235294 0.176471 0.117647 0.0 0.470588
f 0.10 0.400000 0.300000 0.200000 0.0 0.000000

“之后我需要再添加一列来计算:-sum[行中的每个元素 * log(该元素的)]”

你可以这样做

v['log_sum'] = -np.ma.masked_invalid(v * np.log(v)).sum(1)
v

a b c d e f log_sum
tag
a 0.00 0.250000 0.375000 0.250000 0.0 0.125000 -8.965402
b 0.25 0.000000 0.375000 0.250000 0.0 0.125000 -8.965402
c 0.25 0.333333 0.000000 0.166667 0.0 0.250000 -8.461294
d 0.20 0.400000 0.300000 0.000000 0.0 0.100000 -9.560926
e 0.00 0.235294 0.176471 0.117647 0.0 0.470588 -9.708363
f 0.10 0.400000 0.300000 0.200000 0.0 0.000000 -9.560926

关于python - 如何将所选元素与行中的总和值相除,对角线 PANDAS 上的值除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55107688/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com