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