以不寻常的方式对 pandas 数据框进行分组 [英] Group pandas dataframe in unusual way

查看:45
本文介绍了以不寻常的方式对 pandas 数据框进行分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 Pandas 数据框:

I have the following Pandas dataframe:

    data = {
        'ID':  [100, 100, 100, 100, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300],
        'value': [False, False, True, False, False, True, True, True, False, False, False, True, True, False],
    }
    df = pandas.DataFrame (data, columns = ['ID','value'])

我想获得以下组:

  • 第 1 组:对于每个 ID,所有 False 行,直到该 ID 的第一个 True 行
  • 第 2 组:对于每个 ID,该 ID 的最后一个 True 行之后的所有 False 行
  • 第 3 组:所有真实行

这可以用熊猫来完成吗?

Can this be done with pandas?

我试过了

group = df.groupby((df['value'].shift() != df['value']).cumsum())

但这会返回错误的结果.

but this returns an incorrect result.

推荐答案

让我们试试 shift + cumsum 创建 groupby 键:顺便说一句,我真的很喜欢你的显示方式您的预期输出

Let us try shift + cumsum create the groupby key: BTW I really like the way you display your expected output

s = df.groupby('ID')['value'].apply(lambda x : x.ne(x.shift()).cumsum())
d = {x : y for x ,y in df.groupby(s)}
d[2]
     ID  value
2   100   True
5   200   True
6   200   True
7   200   True
11  300   True
12  300   True
d[1]
     ID  value
0   100  False
1   100  False
4   200  False
9   300  False
10  300  False
d[3]
     ID  value
3   100  False
8   200  False
13  300  False

这篇关于以不寻常的方式对 pandas 数据框进行分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆