我有一個資料框,我想將每一行轉換為對角線資料框,并將所有生成的資料框系結到 1 個大資料框。輸入:
a b c
2021-11-06 1 2 3
2021-11-07 4 5 6
期望的輸出:
a b c
Date
2021-11-06 a 1 0 0
b 0 2 0
c 0 0 3
2021-11-07 a 4 0 0
b 0 5 0
c 0 0 6
我嘗試在原始資料幀的每一行上使用 apply 。
data = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a', 'b', 'c'], index=pd.date_range('2021-11-06', '2021-11-07'))
def convert_dataframe(ser):
df_ser = pd.DataFrame(0.0, index=ser.index, columns=ser.index)
np.fill_diagonal(df_ser.values, ser)
return df_ser
data.apply(lambda x: convert_dataframe(x), axis=1)
但是,輸出不是我期望的多索引資料幀。輸出是單個索引資料幀,其中每一行都是對回傳的對角線資料幀的參考。
任何幫助深表感謝。提前致謝。
uj5u.com熱心網友回復:
使用MultiIndex.droplevel了多指標后和呼叫功能洗掉第一級DataFrame.stack在GroupBy.apply:
def convert_dataframe(ser):
ser = ser.droplevel(0)
df_ser = pd.DataFrame(0, index=ser.index, columns=ser.index)
np.fill_diagonal(df_ser.values, ser)
return df_ser
data = data.stack().groupby(level=0).apply(convert_dataframe)
print (data)
a b c
2021-11-06 a 1 0 0
b 0 2 0
c 0 0 3
2021-11-07 a 4 0 0
b 0 5 0
c 0 0 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353854.html
上一篇:將表轉換為沒有因素的資料框
下一篇:某些列滿足條件的資料框子集
