为了账号安全,请及时绑定邮箱和手机立即绑定

通过匹配另一个数据框的多级标题来填充数据框的一列

通过匹配另一个数据框的多级标题来填充数据框的一列

哈士奇WWW 2021-09-14 16:16:47
我有多级数据帧1:Cstep                      step 0    step 1    step 2    step 3    step 4D1      E1      S1       0.372621  0.211435  0.162299  0.149502  0.104143                S2       0.104714  0.106229  0.119725  0.172926  0.496405                S3       0.000000  0.270593  0.540627  0.188780  0.000000                S4       0.144627  0.065209  0.060130  0.272958  0.457076                Unknown  0.491222  0.188258  0.158279  0.162242  0.000000        E2      S1       0.085831  0.328942  0.233738  0.242986  0.108503                S2       0.336600  0.189705  0.314877  0.158818  0.000000                S3       0.000000  0.448532  0.551468  0.000000  0.000000                S4       0.000000  0.000000  0.248368  0.751632  0.000000                Unknown  0.235332  0.371369  0.171224  0.222074  0.000000D2      E1      S1       0.030488  0.272635  0.190137  0.153442  0.353298                S2       0.000000  0.251659  0.309414  0.438927  0.000000                S3       0.000000  0.381712  0.351985  0.266302  0.000000                S4       0.827896  0.000000  0.172104  0.000000  0.000000                Unknown  0.000000  0.189613  0.611961  0.198426  0.000000        E2      S1       0.061281  0.223804  0.171979  0.271795  0.271140                S2       0.124464  0.252529  0.388104  0.234903  0.000000                S3       0.000000  0.045514  0.125909  0.190519  0.638058                S4       0.000000  0.034438  0.000000  0.000000  0.965562                Unknown  0.000000  0.239879  0.258064  0.502057  0.000000我有另一个数据框2:         DT       RE       DS    0        D1       E1       S1    1        D1       E1       S2  2        D2       E1       S2     3        D2       E2       S3  
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

创建一个MultiIndex和fillna


m_idx = pd.MultiIndex.from_arrays(df2.T.values)

m = pd.DataFrame(index=m_idx, columns=df1.columns)


m.fillna(df1)

            step 0    step 1    step 2    step 3    step 4

D1 E1 S1  0.372621  0.211435  0.162299  0.149502  0.104143

      S2  0.104714  0.106229  0.119725  0.172926  0.496405

D2 E1 S2         0  0.251659  0.309414  0.438927         0

   E2 S3         0  0.045514  0.125909  0.190519  0.638058

如果其他人想加入,这里有一个简单的方法来重新创建 DataFrame:


df1 = pd.DataFrame({'step 0': {('D1', 'E1', 'S1'): 0.372621, ('D1', 'E1', 'S2'): 0.10471400000000002, ('D1', 'E1', 'S3'): 0.0, ('D1', 'E1', 'S4'): 0.144627, ('D1', 'E1', 'Unknown'): 0.49122200000000005, ('D1', 'E2', 'S1'): 0.08583099999999999, ('D1', 'E2', 'S2'): 0.3366, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.235332, ('D2', 'E1', 'S1'): 0.030488, ('D2', 'E1', 'S2'): 0.0, ('D2', 'E1', 'S3'): 0.0, ('D2', 'E1', 'S4'): 0.827896, ('D2', 'E1', 'Unknown'): 0.0, ('D2', 'E2', 'S1'): 0.061280999999999995, ('D2', 'E2', 'S2'): 0.124464, ('D2', 'E2', 'S3'): 0.0, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.0}, 'step 1': {('D1', 'E1', 'S1'): 0.21143499999999998, ('D1', 'E1', 'S2'): 0.10622899999999999, ('D1', 'E1', 'S3'): 0.270593, ('D1', 'E1', 'S4'): 0.065209, ('D1', 'E1', 'Unknown'): 0.18825799999999998, ('D1', 'E2', 'S1'): 0.328942, ('D1', 'E2', 'S2'): 0.18970499999999998, ('D1', 'E2', 'S3'): 0.448532, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.371369, ('D2', 'E1', 'S1'): 0.272635, ('D2', 'E1', 'S2'): 0.251659, ('D2', 'E1', 'S3'): 0.381712, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.189613, ('D2', 'E2', 'S1'): 0.223804, ('D2', 'E2', 'S2'): 0.252529, ('D2', 'E2', 'S3'): 0.045514, ('D2', 'E2', 'S4'): 0.034437999999999996, ('D2', 'E2', 'Unknown'): 0.239879}, 'step 2': {('D1', 'E1', 'S1'): 0.162299, ('D1', 'E1', 'S2'): 0.119725, ('D1', 'E1', 'S3'): 0.5406270000000001, ('D1', 'E1', 'S4'): 0.060129999999999996, ('D1', 'E1', 'Unknown'): 0.158279, ('D1', 'E2', 'S1'): 0.233738, ('D1', 'E2', 'S2'): 0.314877, ('D1', 'E2', 'S3'): 0.5514680000000001, ('D1', 'E2', 'S4'): 0.24836799999999998, ('D1', 'E2', 'Unknown'): 0.171224, ('D2', 'E1', 'S1'): 0.190137, ('D2', 'E1', 'S2'): 0.30941399999999997, ('D2', 'E1', 'S3'): 0.351985, ('D2', 'E1', 'S4'): 0.172104, ('D2', 'E1', 'Unknown'): 0.611961, ('D2', 'E2', 'S1'): 0.171979, ('D2', 'E2', 'S2'): 0.388104, ('D2', 'E2', 'S3'): 0.125909, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.25806399999999996}, 'step 3': {('D1', 'E1', 'S1'): 0.149502, ('D1', 'E1', 'S2'): 0.172926, ('D1', 'E1', 'S3'): 0.18878, ('D1', 'E1', 'S4'): 0.272958, ('D1', 'E1', 'Unknown'): 0.162242, ('D1', 'E2', 'S1'): 0.242986, ('D1', 'E2', 'S2'): 0.15881800000000001, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.751632, ('D1', 'E2', 'Unknown'): 0.22207399999999997, ('D2', 'E1', 'S1'): 0.153442, ('D2', 'E1', 'S2'): 0.43892700000000007, ('D2', 'E1', 'S3'): 0.266302, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.198426, ('D2', 'E2', 'S1'): 0.271795, ('D2', 'E2', 'S2'): 0.23490300000000003, ('D2', 'E2', 'S3'): 0.190519, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.502057}, 'step 4': {('D1', 'E1', 'S1'): 0.104143, ('D1', 'E1', 'S2'): 0.49640500000000004, ('D1', 'E1', 'S3'): 0.0, ('D1', 'E1', 'S4'): 0.45707600000000004, ('D1', 'E1', 'Unknown'): 0.0, ('D1', 'E2', 'S1'): 0.108503, ('D1', 'E2', 'S2'): 0.0, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.0, ('D2', 'E1', 'S1'): 0.353298, ('D2', 'E1', 'S2'): 0.0, ('D2', 'E1', 'S3'): 0.0, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.0, ('D2', 'E2', 'S1'): 0.27114, ('D2', 'E2', 'S2'): 0.0, ('D2', 'E2', 'S3'): 0.638058, ('D2', 'E2', 'S4'): 0.965562, ('D2', 'E2', 'Unknown'): 0.0}})

df2 = pd.DataFrame({'DT': {0: 'D1', 1: 'D1', 2: 'D2', 3: 'D2'}, 'RE': {0: 'E1', 1: 'E1', 2: 'E1', 3: 'E2'}, 'DS': {0: 'S1', 1: 'S2', 2: 'S2', 3: 'S3'}})



查看完整回答
反对 回复 2021-09-14
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

有时 df2 的列会更改其顺序。重新排列它们。


import pandas as pd

df1 = pd.DataFrame({'step 0': {('D1', 'E1', 'S1'): 0.372621, ('D1', 'E1', 'S2'): 0.10471400000000002, ('D1', 'E1', 'S3'): 0.0, ('D1', 'E1', 'S4'): 0.144627, ('D1', 'E1', 'Unknown'): 0.49122200000000005, ('D1', 'E2', 'S1'): 0.08583099999999999, ('D1', 'E2', 'S2'): 0.3366, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.235332, ('D2', 'E1', 'S1'): 0.030488, ('D2', 'E1', 'S2'): 0.0, ('D2', 'E1', 'S3'): 0.0, ('D2', 'E1', 'S4'): 0.827896, ('D2', 'E1', 'Unknown'): 0.0, ('D2', 'E2', 'S1'): 0.061280999999999995, ('D2', 'E2', 'S2'): 0.124464, ('D2', 'E2', 'S3'): 0.0, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.0}, 'step 1': {('D1', 'E1', 'S1'): 0.21143499999999998, ('D1', 'E1', 'S2'): 0.10622899999999999, ('D1', 'E1', 'S3'): 0.270593, ('D1', 'E1', 'S4'): 0.065209, ('D1', 'E1', 'Unknown'): 0.18825799999999998, ('D1', 'E2', 'S1'): 0.328942, ('D1', 'E2', 'S2'): 0.18970499999999998, ('D1', 'E2', 'S3'): 0.448532, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.371369, ('D2', 'E1', 'S1'): 0.272635, ('D2', 'E1', 'S2'): 0.251659, ('D2', 'E1', 'S3'): 0.381712, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.189613, ('D2', 'E2', 'S1'): 0.223804, ('D2', 'E2', 'S2'): 0.252529, ('D2', 'E2', 'S3'): 0.045514, ('D2', 'E2', 'S4'): 0.034437999999999996, ('D2', 'E2', 'Unknown'): 0.239879}, 'step 2': {('D1', 'E1', 'S1'): 0.162299, ('D1', 'E1', 'S2'): 0.119725, ('D1', 'E1', 'S3'): 0.5406270000000001, ('D1', 'E1', 'S4'): 0.060129999999999996, ('D1', 'E1', 'Unknown'): 0.158279, ('D1', 'E2', 'S1'): 0.233738, ('D1', 'E2', 'S2'): 0.314877, ('D1', 'E2', 'S3'): 0.5514680000000001, ('D1', 'E2', 'S4'): 0.24836799999999998, ('D1', 'E2', 'Unknown'): 0.171224, ('D2', 'E1', 'S1'): 0.190137, ('D2', 'E1', 'S2'): 0.30941399999999997, ('D2', 'E1', 'S3'): 0.351985, ('D2', 'E1', 'S4'): 0.172104, ('D2', 'E1', 'Unknown'): 0.611961, ('D2', 'E2', 'S1'): 0.171979, ('D2', 'E2', 'S2'): 0.388104, ('D2', 'E2', 'S3'): 0.125909, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.25806399999999996}, 'step 3': {('D1', 'E1', 'S1'): 0.149502, ('D1', 'E1', 'S2'): 0.172926, ('D1', 'E1', 'S3'): 0.18878, ('D1', 'E1', 'S4'): 0.272958, ('D1', 'E1', 'Unknown'): 0.162242, ('D1', 'E2', 'S1'): 0.242986, ('D1', 'E2', 'S2'): 0.15881800000000001, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.751632, ('D1', 'E2', 'Unknown'): 0.22207399999999997, ('D2', 'E1', 'S1'): 0.153442, ('D2', 'E1', 'S2'): 0.43892700000000007, ('D2', 'E1', 'S3'): 0.266302, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.198426, ('D2', 'E2', 'S1'): 0.271795, ('D2', 'E2', 'S2'): 0.23490300000000003, ('D2', 'E2', 'S3'): 0.190519, ('D2', 'E2', 'S4'): 0.0, ('D2', 'E2', 'Unknown'): 0.502057}, 'step 4': {('D1', 'E1', 'S1'): 0.104143, ('D1', 'E1', 'S2'): 0.49640500000000004, ('D1', 'E1', 'S3'): 0.0, ('D1', 'E1', 'S4'): 0.45707600000000004, ('D1', 'E1', 'Unknown'): 0.0, ('D1', 'E2', 'S1'): 0.108503, ('D1', 'E2', 'S2'): 0.0, ('D1', 'E2', 'S3'): 0.0, ('D1', 'E2', 'S4'): 0.0, ('D1', 'E2', 'Unknown'): 0.0, ('D2', 'E1', 'S1'): 0.353298, ('D2', 'E1', 'S2'): 0.0, ('D2', 'E1', 'S3'): 0.0, ('D2', 'E1', 'S4'): 0.0, ('D2', 'E1', 'Unknown'): 0.0, ('D2', 'E2', 'S1'): 0.27114, ('D2', 'E2', 'S2'): 0.0, ('D2', 'E2', 'S3'): 0.638058, ('D2', 'E2', 'S4'): 0.965562, ('D2', 'E2', 'Unknown'): 0.0}})

df2 = pd.DataFrame({'DT':['D1','D1','D2','D2','D1','D2'], 'RE':['E1','E1','E1','E2','E1','E1'], 'DS':['S1','S2','S2','S3','S1','S2']})

df2 = df2[['DT', 'RE', 'DS']]

print(df1)

print(df2)

m_idx = pd.MultiIndex.from_arrays(df2.T.values)

m = pd.DataFrame(index=m_idx, columns=df1.columns)

m.update(df1)

print(m)


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号