Mos*_*orn 7 python group-by intervals pandas
我有一个具有以下结构的数据帧 - 开始,结束和高度.
数据框的一些属性:
我想以一种高度将分组为5个长度的桶的方式对数据帧进行分组,即桶是0,1-5,6-10,11-15和> 15.
请参阅下面的代码示例,其中我正在寻找的是group_by_bucket函数的实现.
我试着查看其他问题,但无法得到我正在寻找的确切答案.
提前致谢!
>>> d = pd.DataFrame([[1,3,5], [4,10,7], [11,17,6], [18,26, 12], [27,30, 15], [31,40,6], [41, 42, 7]], columns=['start','end', 'height'])
>>> d
start end height
0 1 3 8
1 4 10 7
2 11 17 6
3 18 26 12
4 27 30 15
5 31 40 6
6 41 42 7
>>> d_gb = group_by_bucket(d)
>>> d_gb
start end height_grouped
0 1 17 6_10
1 18 30 11_15
2 31 42 6_10
Run Code Online (Sandbox Code Playgroud)
一种方法:
df = pd.DataFrame([[1,3,10], [4,10,7], [11,17,6], [18,26, 12],
[27,30, 15], [31,40,6], [41, 42, 6]], columns=['start','end', 'height'])
Run Code Online (Sandbox Code Playgroud)
使用cut使组:
df['groups']=pd.cut(df.height,[-1,0,5,10,15,1000])
Run Code Online (Sandbox Code Playgroud)
找到断点:
df['categories']=(df.groups!=df.groups.shift()).cumsum()
Run Code Online (Sandbox Code Playgroud)
然后df是:
"""
start end height groups categories
0 1 3 10 (5, 10] 0
1 4 10 7 (5, 10] 0
2 11 17 6 (5, 10] 0
3 18 26 12 (10, 15] 1
4 27 30 15 (10, 15] 1
5 31 40 6 (5, 10] 2
6 41 42 6 (5, 10] 2
"""
Run Code Online (Sandbox Code Playgroud)
定义有趣的数据:
f = {'start':['first'],'end':['last'], 'groups':['first']}
Run Code Online (Sandbox Code Playgroud)
并使用groupby.agg功能:
df.groupby('categories').agg(f)
"""
groups end start
first last first
categories
0 (5, 10] 17 1
1 (10, 15] 30 18
2 (5, 10] 42 31
"""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |