鑒于此輸入:
pd.DataFrame({'C1': [6, np.NaN, 16, np.NaN], 'C2': [17, np.NaN, 1, np.NaN],
'D1': [8, np.NaN, np.NaN, 6], 'D2': [15, np.NaN, np.NaN, 12]}, index=[1,1,2,2])
我想組合以相同字母開頭的列(Cs 和 Ds),以及具有相同索引(1 和 2)的行,并將非空值提取為最簡單的表示,沒有重復,我認為是就像是:
{1: {'C': [6.0, 17.0], 'D': [8.0, 15.0]}, 2: {'C': [16.0, 1.0], 'D': [6.0, 12.0]}}
使用stack或groupby讓我參與其中,但我覺得有一種更有效的方法來做到這一點。
uj5u.com熱心網友回復:
您可以columns通過 lambda 函式重命名帶有聚合lists 的第一個字母,DataFrame.stack然后dictionary在字典理解中創建嵌套:
s = df.rename(columns=lambda x: x[0]).stack().groupby(level=[0,1]).agg(list)
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{1: {'C': [6.0, 17.0], 'D': [8.0, 15.0]}, 2: {'C': [16.0, 1.0], 'D': [6.0, 12.0]}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397681.html
標籤:熊猫
