在pandas groupby中以相同数字序列提取第一个数字

时间:2016-08-22 18:24:04

标签: python pandas

我想通过列'type'对数据帧进行分组,并从每个相同数字序列中获取第一个数字。以下示例说明:

A = pd.DataFrame({'type':['A','A','A','A','A','A','A','A','A','B','B','B','B','B'], 'value':[1,1,1,1,8,8,8,1,1,2,2,3,3,2]})

对于A组,首先是1的序列,然后是8的序列,最后是1的序列。对于B组,有2个中的第一个,然后是3个中的一个,以及2个中的最后一个(仅一个元素)。 A的结果应为1,8,1,B的结果应为2,3,2

type  value
0    A      1
1    A      8
2    A      1
3    B      2
4    B      3
5    B      2

请注意,使用A.groupby('type')。first()或A.groupby('type')。(lambda x:x.unique())将起作用,因为在这两种情况下最后1和最后2将被忽略。请注意,如果我有一个索引来识别每个相同数字的系列,这将是微不足道的。

谢谢你,我感谢你的帮助,

1 个答案:

答案 0 :(得分:1)

def first_contiguous(s):
    return s.groupby(s.ne(s.shift()).cumsum()).head(1)

A.groupby('type').value.apply(first_contiguous).reset_index('type')

enter image description here