pandas 从其它 Dataframe 中转移多索引列

dkqlctbz  于 2023-03-06  发布在  其他
关注(0)|答案(3)|浏览(113)

第一个是这样的:
| | 第二代|F1代|三层|四层|五层|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 二○一九年|八个|1个|三个|四个|六个|
| 小行星2020|九|1个|三个|六个|1个|
| 小行星2021|十个|第二章|四个|五个|1个|
第二个像这样
| | 识别号|资产|
| - ------|- ------|- ------|
| 无|F1代|卡拉克3|
| 1个|第二代|卡拉克1|
| 第二章|三层|卡拉克1|
| 三个|四层|卡拉克2|
| 四个|五层|卡拉克2|
我想得到一个多索引列 Dataframe :
| | 第二代|F1代|三层|四层|五层|
| - ------|- ------|- ------|- ------|- ------|- ------|
| | 卡拉克1|卡拉克3|卡拉克1|卡拉克2|卡拉克2|
| 二○一九年|八个|1个|三个|四个|六个|
| 小行星2020|九|1个|三个|六个|1个|
| 小行星2021|十个|第二章|四个|五个|1个|
谢谢

nwsw7zdq

nwsw7zdq1#

您可以将zipASSET相乘,然后根据它们构造多索引

df1.columns = pd.MultiIndex.from_tuples(zip(df1.columns, df1.columns.map(df2.set_index('ID')['ASSET'])))
print(df1)

         F2     F1     F3     F4     F5
     carac1 carac3 carac1 carac2 carac2
2019      8      1      3      4      6
2020      9      1      3      6      1
2021     10      2      4      5      1
o8x7eapl

o8x7eapl2#

您可以通过Index.map分配另一个DataFrame的反向Map值:

df1.columns = [df1.columns, 
               df1.columns.map(df2.set_index('ID')['ASSET'])]
print (df1)
         F2     F1     F3     F4     F5
     carac1 carac3 carac1 carac2 carac2
2019      8      1      3      4      6
2020      9      1      3      6      1
2021     10      2      4      5      1

或者使用rename

df1.columns = [df1.columns, 
               df1.rename(columns=df2.set_index('ID')['ASSET']).columns]
print (df1)
         F2     F1     F3     F4     F5
     carac1 carac3 carac1 carac2 carac2
2019      8      1      3      4      6
2020      9      1      3      6      1
2021     10      2      4      5      1
vuktfyat

vuktfyat3#

使用MultiIndex构造函数和merge

df1.columns = pd.MultiIndex.from_frame(df2.merge(df1.columns.to_series(name='ID'),
                                   how='right'))
  • 注意:如果df2具有更多列,则可以轻松添加任意数量的级别。*

输出:

ID        F2     F1     F3     F4     F5
ASSET carac1 carac3 carac1 carac2 carac2
2019       8      1      3      4      6
2020       9      1      3      6      1
2021      10      2      4      5      1

相关问题