首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫-每隔一段时间计数频率

熊猫-每隔一段时间计数频率
EN

Stack Overflow用户
提问于 2020-11-06 19:45:30
回答 2查看 380关注 0票数 0

我有一个时间序列的测量数据存储在熊猫的数据:风速,VEL和风向DIR。每个记录每小时测量一次HH (并且应该是相同的)。DD是日期。

代码语言:javascript
运行
复制
YYYY MM DD HH DIR VEL
1990 1 1 1 112.0 4.1
1990 1 1 2 121.0 3.6
1990 1 1 3 27.0 3.1
1990 1 1 4 48.0 2.1
1990 1 1 5 129.0 2.6
1990 1 1 6 61.0 1.1
1990 1 1 7 78.0 3.1
1990 1 1 8 12.0 1.6
1990 1 1 9 37.0 2.6

我想为风速(标题'VEL')和风向('DIR')指定间隔。然后,我想要创建一个新的数据,计算频率在这些间隔。

代码语言:javascript
运行
复制
dir_interval = [0,1,2,3,4,5]
vel_interval = [0,60,120,180,240,300,360]

           0-1   1-2  2-3 3-4  4-5  
0 - 60            2    1          
60 - 120    1     1    1   1    1    
120 - 180              1   1         
180 - 240                         
240 - 300                            
300 - 360                         
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 19:49:22

你似乎把dir_intervalvel_interval搞砸了。尽管如此,我认为您是在寻找crosstabcut

代码语言:javascript
运行
复制
pd.crosstab(pd.cut(df['DIR'], vel_interval),
           pd.cut(df['VEL'], dir_interval))

输出:

代码语言:javascript
运行
复制
VEL         (1, 2]  (2, 3]  (3, 4]  (4, 5]
DIR                                       
(0, 60]          1       2       1       0
(60, 120]        1       0       1       1
(120, 180]       0       1       1       0

Updatenp.histogram2d是一个很好的选择,但更详细:

代码语言:javascript
运行
复制
hist, _, _ = np.histogram2d(x=df['DIR'], y=df['VEL'],
                             bins = (vel_interval, dir_interval))

out = pd.DataFrame(hist.astype(int), 
                   index=[f'{x}-{y}' for x,y in zip(vel_interval[:-1], 
                                                      vel_interval[1:])],
                   columns=[f'{x}-{y}' for x,y in zip(dir_interval[:-1], 
                                                    dir_interval[1:])]
                  )

输出:

代码语言:javascript
运行
复制
         0-1  1-2  2-3  3-4  4-5
0-60       0    1    2    1    0
60-120     0    1    0    1    1
120-180    0    0    1    1    0
180-240    0    0    0    0    0
240-300    0    0    0    0    0
300-360    0    0    0    0    0
票数 4
EN

Stack Overflow用户

发布于 2020-11-06 21:39:19

另一种方式

代码语言:javascript
运行
复制
vel_interval = [0,60,120,180,240,300,360]
dir_interval = [0,1,2,3,4,5]
s=(pd.cut(df.DIR, vel_interval,list(np.arange(120,360,60))))\
.astype(str).str.replace('\(|\]','').str.replace('\,\s','-')#Bin Direction
h=(pd.cut(df.VEL, dir_interval,list(np.arange(1,6,1)))).\
astype(str).str.replace('\(|\]','').str.replace('\,\s','-')#Bin velocity

newindex=pd.Series(vel_interval).astype(str).transform(lambda x: x.shift()+'-'+ x).dropna()#New index

pd.crosstab(s,h).rename_axis(index=None, columns=None).reindex(newindex).fillna('0')#Tabulate result




         1-2 2-3 3-4 4-5
0-60      1   2   1   0
60-120    1   0   1   1
120-180   0   1   1   0
180-240   0   0   0   0
240-300   0   0   0   0
300-360   0   0   0   0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64720740

复制
相关文章

相似问题

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