亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接 Pandas 系列并將系列名稱添加到多級索引

連接 Pandas 系列并將系列名稱添加到多級索引

慕娘9325324 2022-06-22 20:51:39
我有多個具有匹配多級索引的命名 Pandas 系列數據集SeriesA = L1 L2 L3    value_a1   L2 L3    value_a2      L3    value_a3SeriesA.name = First_NameSeriesB =L1 L2 L3    Value_b1   L2 L3    Value_b2      L3    Value_b3SeriesB.name = Second_Name我想要做的是在連接它們之前將系列名稱添加到現有系列索引中。預期的輸出應該是SeriesAB =L1  L2  L3 First_name    value_a1    L2  L3 First_name    value_a2        L3 First_name    value_a3L1  L2  L3 Second_name   value_b1    L2  L3 Second_name   value_b2        L3 Second_name   value_b3我用 pd.join、pd.merge、pd.concat 嘗試了各種方法,但名稱似乎是癥結所在。這樣做的目的是在將名稱值轉換為數據框之前合并名稱值,以便數據看起來像這樣。我猜 unstack 將是解決這個問題的方法。final_data =            First_name  Second_nameL1  L2  L3  value_a1    value_b1    L2  L3  value_a2    value_b2        L3  value_a3    value_b3我也想避免這個輸出Unwanted =                First_Name   Second_NameL1   L2   L3   value_a1     NaN     L2   L3   value_a2     NaN          L3   value_a3     NaNL1   L2   L3   NaN          value_b1     L2   L3   NaN          value_b2          L3   NaN          value_b3 
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

concat與Series.reorder_levels和一起使用Series.unstack。


之后的級別值有重復concat,因此解決方案有點復雜 - 是必要的輔助級別GroupBy.cumcount:


df = (pd.concat([SeriesA, SeriesB], keys=('First_Name','Second_Name'))

        .reorder_levels([1,2,3,0])

        .to_frame('a'))

print (df)

                             a

L1 L2 L3 First_Name   value_a1

         First_Name   value_a2

         First_Name   value_a3

         Second_Name  value_b1

         Second_Name  value_b2

         Second_Name  value_b3


df = (df.set_index(df.groupby(df.index).cumcount(), append=True)['a']

        .unstack([3])

        .reset_index(level=3, drop=True))

print (df)

         First_Name Second_Name

L1 L2 L3   value_a1    value_b1

      L3   value_a2    value_b2

      L3   value_a3    value_b3

如果解決方案更簡單后不重復concat:


print (SeriesA)

L1  L2  L3    value_a1

L2  L2  L3    value_a2

L3  L2  L3    value_a3

Name: a, dtype: object


print (SeriesB)

L1  L2  L3    value_b1

L2  L2  L3    value_b2

L3  L2  L3    value_b3

Name: a, dtype: object


df = (pd.concat([SeriesA, SeriesB], keys=('First_Name','Second_Name'))

        .reorder_levels([1,2,3,0])

        .unstack())

print (df)

         First_Name Second_Name

L1 L2 L3   value_a1    value_b1

L2 L2 L3   value_a2    value_b2

L3 L2 L3   value_a3    value_b3


查看完整回答
反對 回復 2022-06-22
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號