熊猫数据框宽与长-MULTIPLE DF的拆栈,枢轴与外连接

时间:2018-11-20 10:36:41

标签: python pandas dataframe pandas-groupby

问题

我从设备中提取了一些巨大的数据帧,它们跟踪所述设备上的多次运行,每个数据帧记录多个传感器(电压,电流,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]})    

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

pd.pivot_table

您可以旋转数据框。与所需输出的唯一区别是您只有一个time系列;您可以根据需要通过考虑其他系列中的空值来构造time-atime-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