以不寻常的方式对 pandas 数据框进行分组 [英] Group pandas dataframe in unusual way
本文介绍了以不寻常的方式对 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屋!
查看全文