首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将时间序列转换为热图

将时间序列转换为热图
EN

Stack Overflow用户
提问于 2018-11-20 10:17:29
回答 1查看 98关注 0票数 1

我正在寻找一个好的转变,熊猫,这将允许我从一个时间序列的测量到一个计数-每个垃圾箱的清单。

假设我有我的:

代码语言:javascript
复制
x = list(range(count))
y = [random.gauss(1, 0.1) for _ in range(count)]

我可以把它转换成两边的二进制间隔:

代码语言:javascript
复制
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的值计数:

代码语言:javascript
复制
df['y'].value_counts()

但是我很难将“Runvalue_counts on y”按唯一的x值分组,然后展开,然后返回到一个有效的操作中。

示例:

代码语言:javascript
复制
y = [1, 1, 2, 3, 4, 4]
x = [0, 1, 2, 3, 4, 5]
bin_count = 2

预期:

代码语言:javascript
复制
df: x    y  count
    0-2  1  2
    0-2  2  1
    3-5  3  1
    3-5  4  2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-20 10:25:40

我相信你需要SeriesGroupBy.value_countsreset_index

代码语言:javascript
复制
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

代码语言:javascript
复制
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

编辑:

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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53390778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档