【问题标题】:find first consecutive values groups by ids按 id 查找第一个连续值组
【发布时间】:2021-02-28 13:18:55
【问题描述】:

我有一个数据框,我想为每个 id 连续分组

id   value 
a1   1
a1   3
a1   4
a2   1
a2   2 
a2   3
a2   5
a2   8
a2   9

我想要一个输出,它为每个 id 标识“第一个”连续组,我尝试了不同的措施,但只是徒劳,因为它返回的 id 值在休息后是连续的。

我想要这样的输出

id  value
a1  1
a2  1
a2  2
a2  3

不胜感激

【问题讨论】:

  • 你能解释一下输出中的a2 2, a2 3吗?
  • 基本上对于 id a2 值 1,2,3 是该 id 的第一个连续值。并且值 8,9 是对相同 id 连续的另一组。我正在寻找第一个连续值

标签: python pandas numpy dataframe data-manipulation


【解决方案1】:

想法是通过比较不等于 q 与累积总和的差异来创建连续组,然后为第一组测试 GroupBy.transformGroupBy.firstGroupBy.min 的第一个值:

s = df['value'].diff().ne(1).cumsum()
df1 = df[s.groupby(df['id']).transform('first').eq(s)]
#alternative
#df1 = df[s.groupby(df['id']).transform('min').eq(s)]
print (df1)
   id  value
0  a1      1
3  a2      1
4  a2      2
5  a2      3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多