我从设备中提取了一些巨大的数据帧,它们跟踪所述设备上的多次运行,每个数据帧记录多个传感器(电压,电流,rpm,压力等)。 我需要扩大此数据集以进行绘图和进一步分析,但是不幸的是,传感器上的时钟未同步,因此收集的每个参数都有各自的时间戳,并且长度可能不同(毫秒,因此有时> 10行)。
我尝试拆箱:
df.set_index(['index','start_time','param']).value.unstack().rename_axis(None, 1).reset_index()
透视:
df.pivot_table(values = 'value', index = ['index','start_time'], columns = 'param')
但是长度不同会导致实际问题(可以理解)。
我有将基于日期(即单个运行)或参数转换为dfs字典的代码,并且可以对每个运行或参数进行分析-但是有大约100个传感器和18个月的运行时间( !)所以想确保没有办法做我想做的...我认为这是某种多外连接。由于长度不同,因此需要用NaN填充空白-很好-找到任何参数的最大长度,以将日期的长度调整为。
df_long = pd.DataFrame({"Date" : np.array([1]*5 + [2]*3 + [3]*4 + [4]*2 + [5]*4),
"Param" : list('aaabbabbabccaaaacc'),
"value": [0.1, 0.2, 0.2, 1, 4, 0.6, 0.5, 90, 0.9, 8.8, 4.1, 0.4, 0.5, 0.1, 0.1, 0.3, 3.4, 5.1],
"time" : [1,2,3,1,2,1,1,2,1,1,1,2,1,2,1,2,1,2]
})
df_wide = pd.DataFrame ({
"Date" : [1,1,1,2,2,3,3,4,4,5,5],
"a": [0.1,0.2,0.2,0.6,'NaN',0.9,'NaN',0.5,0.1,0.1,0.3],
"time-a": [1,2,3,1,'NaN',1,'NaN',1,2,1,2],
"b": [1,4,'NaN',0.5,90,8.8,'NaN','NaN','NaN','NaN','NaN'],
"time-b": [1,2,'NaN', 1,2,1,'NaN','NaN','NaN','NaN','NaN'],
"c": ['NaN','NaN','NaN','NaN','NaN',4.1,0.4,'NaN','NaN',3.4,5.1],
"time-c": ['NaN','NaN','NaN','NaN','NaN',1,2,'NaN','NaN',1,2]})
任何帮助表示赞赏
答案 0 :(得分:1)
pd.pivot_table
您可以旋转数据框。与所需输出的唯一区别是您只有一个time
系列;您可以根据需要通过考虑其他系列中的空值来构造time-a
,time-b
等。
res = pd.pivot_table(df_long, index=['Date', 'time'],
columns=['Param'], values='value').reset_index()
print(res)
Param Date time a b c
0 1 1 0.1 1.0 NaN
1 1 2 0.2 4.0 NaN
2 1 3 0.2 NaN NaN
3 2 1 0.6 0.5 NaN
4 2 2 NaN 90.0 NaN
5 3 1 0.9 8.8 4.1
6 3 2 NaN NaN 0.4
7 4 1 0.5 NaN NaN
8 4 2 0.1 NaN NaN
9 5 1 0.1 NaN 3.4
10 5 2 0.3 NaN 5.1