考慮以下熊貓資料框:
import numpy as np
import pandas as pd
df_foo = pd.DataFrame([1,2,3])
我相信我曾經能夠將這個 DataFrame 對角化如下(參見例如這個執行緒Diagonalising a Pandas series)
df_foo_diag = pd.DataFrame(np.diag(df_foo), index=df_foo.index, columns = df_foo.index)
但是,當我現在這樣做時,似乎np.diag(df_foo)回傳了一個包含 DataFrame 的第一個值的 1 × 1 陣列。換句話說,numpy 似乎提取了對角線,而不是構造對角線陣列。
如何從一維 DataFrame 構建對角線 DataFrame?
uj5u.com熱心網友回復:
將一列 Dataframe 轉換為SeriesbyDataFrame.squeeze然后您的解決方案運行良好:
df_foo_diag = pd.DataFrame(np.diag(df_foo.squeeze()),
index=df_foo.index,
columns = df_foo.index)
print (df_foo_diag)
0 1 2
0 1 0 0
1 0 2 0
2 0 0 3
df_foo = pd.DataFrame([10,20,30])
df_foo_diag = pd.DataFrame(np.diag(df_foo.squeeze()),
index=df_foo.index,
columns = df_foo.index)
print (df_foo_diag)
0 1 2
0 10 0 0
1 0 20 0
2 0 0 30
uj5u.com熱心網友回復:
使用 2D 輸入沒有多大意義。
只需使用 DataFrame 的相關列,您將擁有原始案例:
df_foo_diag = pd.DataFrame(np.diag(df_foo[0]),
index=df_foo.index, columns=df_foo.index)
輸出:
0 1 2
0 1 0 0
1 0 2 0
2 0 0 3
uj5u.com熱心網友回復:
簡單地展平你的一維資料框
df_foo_diag = pd.DataFrame(np.diag(df_foo.to_numpy().flatten()),
index=df_foo.index, columns = df_foo.index)
print(df_foo_diag)
0 1 2
0 1 0 0
1 0 2 0
2 0 0 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444001.html
下一篇:應用需要列中其他值的函式?
