gpt4 book ai didi

python - Pandas Dataframe,更改 "diagonal"上的值(其中索引值等于列名)

转载 作者:太空狗 更新时间:2023-10-30 02:29:43 25 4
gpt4 key购买 nike

我有一个 pandas DataFrame,其中索引是列的子集,即索引中的每个值也是一个列名,并且还有其他列,所以像这样:

import pandas as pd
import numpy as np
df = pd.DataFrame(index=['John', 'Mary', 'Steven'],
columns=['John','Susan','Steven','Chris','Mary'],
data=np.arange(15).reshape(3,5))

我现在想将“对角线”项设置为固定值,比如 0.0。 “对角线”是指那些索引值与列名匹配的条目。我可以通过遍历索引并在该循环中将每个“对角线”条目设置为 0.0 来实现。

for i in df.index:
df.loc[i, i] = 0.0

但我想知道是否有更 pythonic 的方式,即可能实现此目标的矢量化。我在想一定有类似 df.loc[df.index, df.index] = 0.0 的东西,但这不会产生预期的结果。

最佳答案

你可以使用 numpy 的 fill_diagonal 函数

import numpy as np 

#rearrange columns according to order of index
df = df.reindex(columns=list(df.index) + list(df.columns.difference(df.index)))

np.fill_diagonal(df.values,0)

print df
John Mary Steven Chris Susan
John 0 4 2 3 1
Mary 5 0 7 8 6
Steven 10 14 0 13 11

关于python - Pandas Dataframe,更改 "diagonal"上的值(其中索引值等于列名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005127/

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