如何合并数据框中具有最接近值的行

Fre*_*sto 4 python pandas

我有一个DataFrame这样的:

index B
0     1
1     2
2     5
3     6
4     7
5     10
Run Code Online (Sandbox Code Playgroud)

我需要合并差值小于或等于 2 的行,选择值较小的行并设置计数合并

结果应该是这样的:

index B count
0     1   2
1     5   3
2     10  1
Run Code Online (Sandbox Code Playgroud)

如何使用 pandas 解决这个问题?

Sco*_*ton 7

与 @AndrejKesely非常相似,只是语法更短,使用命名聚合

df.groupby(df["B"].diff().gt(2).cumsum(), 
           as_index=False).agg(B=("B", "first"), 
                               count=("B", "count"))
Run Code Online (Sandbox Code Playgroud)

输出:

    B  count
0   1      2
1   5      3
2  10      1
Run Code Online (Sandbox Code Playgroud)


And*_*ely 5

使用.groupby()您所做的地方,.diff()然后是.cumsum()

out = (
    df.groupby(df["B"].diff().gt(2).cumsum())
    .agg({"B": ("min", "count")})
    .droplevel(0, axis=1)
    .rename(columns={"min": "B"})
    .reset_index(drop=True)
)

print(out)
Run Code Online (Sandbox Code Playgroud)

印刷:

    B  count
0   1      2
1   5      3
2  10      1
Run Code Online (Sandbox Code Playgroud)