Pandas Groupby值范围

BJE*_*EBN 69 python group-by pandas

在pandas中有一个简单的方法来调用groupby一系列的值增量吗?例如,给定下面的示例,我可以B使用0.155增量对列进行bin和group ,以便例如列B中的前几个组被分成两个范围之间的范围.groupby

import numpy as np
import pandas as pd
df=pd.DataFrame({'A':np.random.random(20),'B':np.random.random(20)})

     A         B
0  0.383493  0.250785
1  0.572949  0.139555
2  0.652391  0.401983
3  0.214145  0.696935
4  0.848551  0.516692
Run Code Online (Sandbox Code Playgroud)

或者,我可以先按这些增量将数据分类到新列中,然后用于A确定可能适用于列的任何相关统计数据groupby

DSM*_*DSM 108

您可能对以下内容感兴趣pd.cut:

>>> df.groupby(pd.cut(df["B"], np.arange(0, 1.0+0.155, 0.155))).sum()
                      A         B
B                                
(0, 0.155]     2.775458  0.246394
(0.155, 0.31]  1.123989  0.471618
(0.31, 0.465]  2.051814  1.882763
(0.465, 0.62]  2.277960  1.528492
(0.62, 0.775]  1.577419  2.810723
(0.775, 0.93]  0.535100  1.694955
(0.93, 1.085]       NaN       NaN

[7 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)

  • 我有可能在多个方面做到这一点吗?基本上按两个值同时分组? (7认同)
  • 我必须使用两列进行分组。第一列是一个字符串,我必须将具有相同名称的行分组。在这些组中,我必须根据第二列中的值范围进一步对它们进行分组。我这样做如下: `(qa_scores_data.groupby(['视频名称', pandas.cut(qa_scores_data['帧名称'].astype('float'), [0.5, 12.5, 24.5, 36.5, 48.5])] )).mean()` (3认同)
  • 我会收到此错误:“ValueError:石斑鱼(9235)和轴(8769)的长度必须相同” (2认同)

Alv*_*tes 10

试试这个:

df = df.sort('B')
bins =  np.arange(0,1.0,0.155)
ind = np.digitize(df['B'],bins)

print df.groupby(ind).head()
Run Code Online (Sandbox Code Playgroud)

当然,您不仅可以在组上使用任何功能head.