Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas groupby:在检查点之间对行进行分组_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python pandas groupby:在检查点之间对行进行分组

Python pandas groupby:在检查点之间对行进行分组,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,如何在“检查点”之间对所有行进行分组 例如,如果 import pandas as pd df = pd.DataFrame(dict(a=list('abcdefgh'))) checkpoints = [0, 1.5, 6] 如何获取组((0,'a'),(1,'b'))和((2,'c'),(3,'d'),(4,'e'),(5,'f'))和((6,'g'),(7,'h')) 在我的实际用例中,索引是一个日期时间索引,如果解决方案基于逻辑比较而不是索引位置,那就更好了 编辑:检查点并不总是索引

如何在“检查点”之间对所有行进行分组

例如,如果

import pandas as pd
df = pd.DataFrame(dict(a=list('abcdefgh')))
checkpoints = [0, 1.5, 6]
如何获取组
((0,'a'),(1,'b'))和((2,'c'),(3,'d'),(4,'e'),(5,'f'))和((6,'g'),(7,'h'))

在我的实际用例中,索引是一个日期时间索引,如果解决方案基于逻辑比较而不是索引位置,那就更好了


编辑:检查点并不总是索引的子集

一个选项是创建一个标记检查点的新系列,并在该系列上分组:

s = (pd.Series(1, index=checkpoints)
       .reindex(df.index, fill_value=0)
       .cumsum()
    )

[list(v['a'].to_dict().items()) for _,v in df.groupby(s)]
输出:


一个选项是创建一个新系列,标记检查点并在该系列上分组:

s = (pd.Series(1, index=checkpoints)
       .reindex(df.index, fill_value=0)
       .cumsum()
    )

[list(v['a'].to_dict().items()) for _,v in df.groupby(s)]
输出:


让我们使用
cumsum
创建密钥,然后使用
groupby

out = df.reset_index().agg(tuple,1).groupby(df.index.isin(checkpoints).cumsum()).agg(list)
Out[55]: 
1                    [(0, a), (1, b)]
2    [(2, c), (3, d), (4, e), (5, f)]
3                    [(6, g), (7, h)]
dtype: object

让我们使用
cumsum
创建密钥,然后使用
groupby

out = df.reset_index().agg(tuple,1).groupby(df.index.isin(checkpoints).cumsum()).agg(list)
Out[55]: 
1                    [(0, a), (1, b)]
2    [(2, c), (3, d), (4, e), (5, f)]
3                    [(6, g), (7, h)]
dtype: object

我还不清楚这一点,但在我的实际用例中,我使用的检查点日期不一定在最初的indexIn中,事实上,我明确地说了相反的话。无论如何,如果你对非子集的情况有一个想法,我也很感激,我很抱歉在创建MWE时失败了,我真的有一个多索引,其中多个条目具有相同的日期,我希望组按[“日期范围”,“其他索引级别”],这是您的解决方案不适用于meI的另一个原因我想我已经找到了,使用unstack并使用一些丑陋的方式将检查点捕捉到indexHaven中的关闭日期,对此我并不清楚,但在我的实际用例中,我使用的检查点日期不一定在原始indexIn事实中,我明确地说了相反的话。无论如何,如果你对非子集的情况有一个想法,我也很感激,我很抱歉在创建MWE时失败了,我真的有一个多索引,其中多个条目具有相同的日期,我希望组按[“日期范围”,“其他索引级别”],这是你的解决方案不适用于meI的另一个原因,我想我已经找到了,使用unstack和一些丑陋的方法将检查点捕捉到索引中的结束日期