将时间序列转换为热图

时间:2018-11-20 10:17:29

标签: python pandas heatmap

我正在寻找一种熊猫的良好转换方法,使我能够从一个时间序列的测量值转变为一个按时间间隔计数的列表。

让我说我有:

x = list(range(count))
y = [random.gauss(1, 0.1) for _ in range(count)]

我可以将其转换为两侧的合并间隔:

df = pandas.DataFrame.from_dict({'x': x, 'y': y})
df['x'].update(pandas.cut(df['x'], 20))
df['y'].update(pandas.cut(df['y'], 20))

我知道我可以使用以下方法获取y的值计数:

df['y'].value_counts()

但是我无法将“按唯一的y值分组的x上的运行value_counts,然后展开,然后将其返回”进行有效操作。


示例:

y = [1, 1, 2, 3, 4, 4]
x = [0, 1, 2, 3, 4, 5]
bin_count = 2

预期:

df: x    y  count
    0-2  1  2
    0-2  2  1
    3-5  3  1
    3-5  4  2

1 个答案:

答案 0 :(得分:1)

我相信您需要SeriesGroupBy.value_countsreset_index

y = [1, 1, 2, 3, 4, 4]
x = [0, 1, 2, 3, 4, 5]
bin_count = 2
df = pd.DataFrame.from_dict({'x': x, 'y': y})
df['x'].update(pd.cut(df['x'], bin_count))

df1 = df.groupby('x')['y'].value_counts().reset_index(name='count')
print (df1)
               x  y  count
0  (-0.005, 2.5]  1      2
1  (-0.005, 2.5]  2      1
2     (2.5, 5.0]  4      2
3     (2.5, 5.0]  3      1

对于y中的列,请使用unstack

df1 = df.groupby('x')['y'].value_counts().unstack(fill_value=0)
print (df1)
y              1  2  3  4
x                        
(-0.005, 2.5]  2  1  0  0
(2.5, 5.0]     0  0  1  2

编辑:

如果需要唯一的容器值,请将参数labels=False添加到cut

df['x'].update(pd.cut(df['x'], bin_count, labels=False))

df1 = df.groupby('x')['y'].value_counts().unstack(fill_value=0)
print (df1)
y  1  2  3  4
x            
0  2  1  0  0
1  0  0  1  2