Python 是否将行项目映射到另一个数据帧的固定列集?

Python 是否将行项目映射到另一个数据帧的固定列集?,python,pandas,Python,Pandas,我一直在尝试将每个频道的速度和注释映射到另一个数据帧 例如: 我有一个这样格式的表格: 此表中不可见,但对于每个时间多个通道,如(1,2,…16)可能可用(每个时间每个通道只出现一次,即通道对特定时间不重复)及其相应的注释和速度值 因为通道仅在1到16的固定范围内。 因此,这将导致创建一个新数据框的32固定列,如: |时间| C1注| C1速度| C2注| C2速度|C16注释| C16速度| 如果找不到特定列的值,请用0填充该列 有没有一种方法可以做到这一点呢?试试这个MCVE: impor

我一直在尝试将每个
频道
速度
注释
映射到另一个数据帧

例如: 我有一个这样格式的表格:

此表中不可见,但对于每个
时间
多个
通道
,如(1,2,…16)可能可用(每个
时间
每个通道只出现一次,即
通道
对特定
时间
不重复)及其相应的
注释
速度

因为通道仅在
1到16的固定范围内。
因此,这将导致创建一个新数据框的
32
固定列,如:

|时间| C1注| C1速度| C2注| C2速度|C16注释| C16速度|

如果找不到特定列的值,请用
0
填充该列

有没有一种方法可以做到这一点呢?

试试这个MCVE:

import numpy as np
import pandas as pd
timelist = np.arange(1,21)
channels = [1,2,3,5]

df = pd.DataFrame({'notes':np.random.randint(100,200,80), 
                   'velocity':np.random.randint(1000,9000, 80)},
                 index=pd.MultiIndex.from_product([timelist, channels]))

df = df.rename_axis(['Time', 'Channel'])
输入数据帧:

              notes  velocity
Time Channel                 
1    1          199      7683
     2          106      5981
     3          111      8324
     5          177      6123
2    1          113      6608
...             ...       ...
19   5          120      1779
20   1          149      7591
     2          171      8513
     3          128      1341
     5          192      5942

[80 rows x 2 columns]
尝试取消堆叠并展平标题:

df_out = df.unstack().reindex(pd.MultiIndex.from_product([['notes','velocity'], 
                                                          [1,2,3,4,5]]), 
                              axis=1, 
                              fill_value=0)

df_out.columns = [f'C{j} {i}' for i,j in df_out.columns]
df_out
输出:

      C1 notes  C2 notes  C3 notes  C4 notes  C5 notes  C1 velocity  C2 velocity  C3 velocity  C4 velocity  C5 velocity
Time                                                                                                                   
1          199       106       111         0       177         7683         5981         8324            0         6123
2          113       115       151         0       115         6608         3461         8315            0         1142
3          142       160       160         0       130         4394         7909         1738            0         1283
4          128       175       148         0       197         4002         4245         7066            0         1851
5          148       129       196         0       144         7755         3266         4123            0         6621

使用unstack(),在列标题中移动通道创建多索引列标题,然后可以展平列标题。非常感谢!谢谢你向我介绍这个概念,并给我一个快速而机智的答复。