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