0

データフレームがあり、次の行のインデックスが 1 に前のインデックスを加えたものよりも大きい場合 (たとえば、インデックスが 73 から 75 またはそれ以上になる場合)、これらを別々のデータフレームに分割したいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

4

これは、通常の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 より大きい bool の累積を取得すると、グループごとに成長するインデックスが得られます。

>>> 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
于 2015-10-07T15:09:23.870 に答える