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

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

2將列級別由內而外

2將列級別由內而外

守著星空守著你 2023-03-01 09:47:43
我有一個看起來像這樣的 pandas DataFrame(創建它的代碼在問題的底部):  col_1 col_2 foo_1       foo_2                    col_3 col_4 col_3 col_40     1     4     2     8     5     71     3     1     6     3     8     9我想將foo_1和foo_2列“由內而外”,即我的預期輸出是:   col_1  col_2                     col_3                     col_40      1      4  {'foo_1': 2, 'foo_2': 5}  {'foo_1': 8, 'foo_2': 7}1      3      1  {'foo_1': 6, 'foo_2': 8}  {'foo_1': 3, 'foo_2': 9}是否有一種有效的方法(即不涉及編寫逐行遍歷每一行的 python 循環)在 pandas 中執行此操作?生成起始 DataFrame 的代碼:import pandas as pdcols = pd.MultiIndex.from_tuples(    [        ("col_1", ""),        ("col_2", ""),        ("foo_1", "col_3"),        ("foo_1", "col_4"),        ("foo_2", "col_3"),        ("foo_2", "col_4"),    ])df = pd.DataFrame([[1, 4, 2, 8, 5, 7], [3, 1, 6, 3, 8, 9]], columns=cols)生成預期輸出的代碼:pd.DataFrame(    [        {            "col_1": 1,            "col_2": 4,            "col_3": {"foo_1": 2, "foo_2": 5},            "col_4": {"foo_1": 8, "foo_2": 7},        },        {            "col_1": 3,            "col_2": 1,            "col_3": {"foo_1": 6, "foo_2": 8},            "col_4": {"foo_1": 3, "foo_2": 9},        },    ])
查看完整描述

1 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

使用DataFrame.filter+并使用DataFrame.droplevel聚合列,最后使用刪除列:axis=1dictDataFrame.dropMultiLevel


df['col_3'] = df.filter(like='col_3').droplevel(1, 1).agg(dict, axis=1)

df['col_4'] = df.filter(like='col_4').droplevel(1, 1).agg(dict, axis=1)


df = df.drop(['foo_1', 'foo_2'], 1).droplevel(1, 1)

結果:


# print(df)


  col_1 col_2                     col_3                     col_4

0     1     4  {'foo_1': 2, 'foo_2': 5}  {'foo_1': 8, 'foo_2': 7}

1     3     1  {'foo_1': 6, 'foo_2': 8}  {'foo_1': 3, 'foo_2': 9}


查看完整回答
反對 回復 2023-03-01
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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