我有一个数据框:

df = pd.DataFrame({'start': [50, 100, 50000, 50030, 100000],
                'end': [51, 101, 50001, 50031, 100001],
                'value': [1, 2, 3, 4, 5]},
               index=['id1', 'id2', 'id3', 'id4', 'id5'])

>>> df
            start      end      value
 id1           50      51         1
 id2           100     101        2
 id3           50000   50001      3
 id4           50030   50031      4
 id5           100000  100001     5

现在,我想在"开始"列中提取大小范围为150的所有行的组.输出应该如下所示:

group    group_start   group_end       min_val      max_value   id_count
  1         50           101             1              2         2
  2         50000        50031           3              4         2
  3         100000       100001          5              5         1

如何提取这些群体?

推荐答案

使用:

start = df['start'].iloc[0]
g = 0
gs = []
for val in df['start']:
    if val-start<150:
        gs.append(g)
    else:
        g+=1
        start = val
        gs.append(g)
        
df['g'] = gs
df.groupby('g').agg(group_start = ('start', 'first'), group_end = ('end', 'last'), min_val = ('value', 'min'), max_value = ('value', 'max'), id_count = ('value', 'count'))

输出:

enter image description here

根据 comments :

df.groupby('g').agg(group_start = ('start', 'first'), group_end = ('end', 'last'), min_val = ('value', 'min'), max_value = ('value', 'max'), id_count = ('value', 'idxmax'))

Python相关问答推荐

pandas MultiIndex是SQL复合索引的对应物吗?

从收件箱获取特定列中的重复行

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

自动编码器和极坐标

CustomTKinter-向表单添加额外的输入字段

Snap 7- read_Area用于类似地址的变量

在Windows上启动新Python项目的正确步骤顺序

Python主进程和分支进程如何共享gc信息?

跟踪我已从数组中 Select 的样本的最有效方法

根据网格和相机参数渲染深度

如何在Python中使用io.BytesIO写入现有缓冲区?

仿制药的类型铸造

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

运行终端命令时出现问题:pip start anonymous"

Julia CSV for Python中的等效性Pandas index_col参数

有没有一种方法可以从python的pussompy比较结果中提取文本?

ThreadPoolExecutor和单个线程的超时

部分视图的DataFrame

迭代嵌套字典的值

Python Pandas—时间序列—时间戳缺失时间精确在00:00