【发布时间】:2019-04-22 18:52:10
【问题描述】:
问题
我从设备中提取了一些巨大的数据帧,它们跟踪所述设备上的多次运行,每个记录多个传感器(电压、电流、转速、压力......等) 我需要扩大这个数据集以进行绘图和进一步分析,但不幸的是传感器上的时钟不同步,因此不同的参数被收集起来,每个参数都有自己的时间戳,并且长度可能不同(毫秒,所以有时 >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]})
非常感谢任何帮助
【问题讨论】:
-
在
df_long中Date列等于1五次,但在df_wide中只等于1三次,是这部分的预期输出吗,如果是这样,根据什么逻辑? -
随着 db 变宽,它也会缩短 - 因此参数
a的 5 个 1 和参数b的 2 个 1 现在只有 3 个 1。这是标准的拆垛行为;这些问题是每个日期和每个参数的测量都是不同的长度
标签: python pandas dataframe pivot-table pandas-groupby