python - 如何在 Python 中对数据框进行分组并汇总连续数字的子组?

标签 python pandas pandas-groupby group-summaries

我有一个数据框,其中一列包含 id,另一列包含数字:

df1 = {'ID':[400, 400, 400, 400, 400, 400, 500, 500, 500, 500], 
      'Number':[1, 2, 3, 4, 8, 9, 22, 23, 26, 27]}

您可能会注意到,每个 Id 在“编号”列中都有其对应的一系列连续编号。例如:

Id 400 包含一系列长度为 4 {1, 2, 3, 4} 和另一个长度为 2 {8, 9}

我想为每个 Id 获取其对应系列的平均长度。 在这个例子中:

df2 = {'ID':[400, 500], 'avg_length':[3, 2]}

任何想法将不胜感激!

最佳答案

这里有一个方法,两次使用groupby,

df1['tmp'] = (df1.Number - df1.Number.shift() > 1).cumsum()

df1.groupby(['ID', 'tmp']).Number.count().groupby(level = 0).mean().reset_index(name = 'avg_length')

2.29 ms ± 75.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

    ID  avg_length
0   400 3
1   500 2

选项2:不使用两次apply,仍然使用之前创建的tmp列

df1.groupby('ID').tmp.apply(lambda x: x.value_counts().mean()).reset_index(name = 'avg_length')

2.25 ms ± 99.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - 如何在 Python 中对数据框进行分组并汇总连续数字的子组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416534/

相关文章:

python - 类型错误 : unsupported operand type(s) for -: 'list' and 'float'

python - 正确使用 Qthread 子类化有效,更好的方法吗?

python - 如何只修改数字变量python

python - 使用 python pandas 将 csv 文件中的多行合并为一行

python - 使用 pandas 按列分组,然后根据条件创建新列

python - 在Python中将字符串按空格分割成最大长度的子字符串

python - Python 中类似 MATLAB 的变量编辑器

regex - 使用 pandas 将逗号分隔符添加到 Dataframe 列中的字符串

python - 如何使用重复的索引分类数据创建多线图?

python - 如何分组并获得最频繁的 ngram?