【问题标题】:How to split pandas dataframe into groups based on index of rows如何根据行的索引将熊猫数据框分成组
【发布时间】:2015-10-07 14:25:13
【问题描述】:

我有一个数据框,如果下一行的索引大于 1 加上前一个索引(例如,如果它从索引 73 到 75 或更高),我想将它们拆分为单独的数据框。我怎样才能做到这一点?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    这可以使用通常的 compare-cumsum-groupby 模式的变体来完成,仅应用于索引而不是列。 (至少在索引正常的情况下。)例如:

    >>> df = pd.DataFrame({"A": list("abcde")}, index=[1,2,4,5,8])
    >>> df
       A
    1  a
    2  b
    4  c
    5  d
    8  e
    >>> grouped = df.groupby((df.index.to_series().diff() > 1).cumsum())
    >>> for group_id, group in grouped:
    ...     print("group id:", group_id)
    ...     print(group)
    ...     print()
    ...     
    group id: 0
       A
    1  a
    2  b
    
    group id: 1
       A
    4  c
    5  d
    
    group id: 2
       A
    8  e
    

    您可以直接使用frames = [g for k,g in grouped] 或其他方式获取框架。


    这是可行的,因为我们可以使用diff 来比较索引中的跳跃(在转换为系列之后),然后如果我们对差值大于 1 的一些布尔值进行累积,我们会得到一个增长每个组的索引:

    >>> df.index.to_series().diff()
    1   NaN
    2     1
    4     2
    5     1
    8     3
    dtype: float64
    >>> df.index.to_series().diff() > 1
    1    False
    2    False
    4     True
    5    False
    8     True
    dtype: bool
    >>> (df.index.to_series().diff() > 1).cumsum()
    1    0
    2    0
    4    1
    5    1
    8    2
    dtype: int64
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2016-09-05
      • 2022-01-25
      • 1970-01-01
      • 2018-02-07
      • 2020-09-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多