使用Pandas系列中的元素填充Pandas DataFrame的对角线

鉴于一个带有索引的熊猫系列:

import pandas as pd

s = pd.Series(data=[1,2,3],index=['a','b','c'])

如何使用系列来填充pandas版本> = 0.23.0中空数据框架的对角线条目?

生成的DataFrame看起来像:

  a b c
a 1 0 0
b 0 2 0
c 0 0 3

有一个a prior similar question将填充对角线相同的值,我的问题是要求用一系列不同的值填充对角线.

提前感谢您的考虑和回应.

最佳答案 首先创建DataFrame,然后创建
numpy.fill_diagonal

import numpy as np

s = pd.Series(data=[1,2,3],index=['a','b','c'])

df = pd.DataFrame(0, index=s.index, columns=s.index, dtype=s.dtype)

np.fill_diagonal(df.values, s)
print (df)
   a  b  c
a  1  0  0
b  0  2  0
c  0  0  3

另一种解决方案是创建空的2d数组,向对角线添加值,最后使用DataFrame构造函数:

arr = np.zeros((len(s), len(s)), dtype=s.dtype)
np.fill_diagonal(arr, s)

print (arr)
[[1 0 0]
 [0 2 0]
 [0 0 3]]

df = pd.DataFrame(arr, index=s.index, columns=s.index)
print (df)
   a  b  c
a  1  0  0
b  0  2  0
c  0  0  3
点赞