列の値に基づいてデータフレームグループの最初と最後の行を取得する

成熟した

私はこのようなデータフレームを持っています

df = pd.DataFrame({'c1': ['a','a','a', 'b','b','a','a'],
                    'c2':[1,3,5,7,9,11,13],
                    'c3':[2,4,6,8,10,12,14]})



  c1  c2  c3
0  a   1   2
1  a   3   4
2  a   5   6
3  b   7   8
4  b   9  10
5  a  11  12
6  a  13  14

列c1の値が変更されるたびに、最初と最後の行を取得したいと思います。

この例では、出力は次のようになります。

  c1  c2  c3
0  a   1   2
2  a   5   6
3  b   7   8
4  b   9  10
5  a  11  12
6  a  13  14

使うことができます

idx = np.where(df.c1.ne(df.c1.shift()) != 0)[0]

このような最初の行を取得するには

df.iloc[idx,:]

  c1  c2  c3
0  a   1   2
3  b   7   8
5  a  11  12

しかし、最後の行を取得できません

  c1  c2  c3
2  a   5   6
4  b   9  10
6  a  13  14

これらの行を取得するための最良の方法は何でしょうか?

ジェズリール

ブールマスクによるフィルタリングを使用して、ソリューションを簡略化できます。

df1 = df[df.c1.ne(df.c1.shift())]
print (df1)
  c1  c2  c3
0  a   1   2
3  b   7   8
5  a  11  12

df2 = df[df.c1.ne(df.c1.shift(-1))]
print (df2)
  c1  c2  c3
2  a   5   6
4  b   9  10
6  a  13  14

そして、すべての行のチェーン条件|についてbitwise OR

df3 = df[df.c1.ne(df.c1.shift()) | df.c1.ne(df.c1.shift(-1))]
print (df3)
  c1  c2  c3
0  a   1   2
2  a   5   6
3  b   7   8
4  b   9  10
5  a  11  12
6  a  13  14

パフォーマンス:

明らかに、groupbyソリューションの方が高速ではありませんが、実際のデータでのテストに最適です。

#7k rows
df = pd.concat([df] * 1000, ignore_index=True)

In [53]: %timeit df.groupby(df.c1.ne(df.c1.shift()).cumsum(), as_index=False).nth([0, -1])
3.57 ms ± 283 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [54]: %timeit df[df.c1.ne(df.c1.shift()) | df.c1.ne(df.c1.shift(-1))]
1.53 ms ± 6.79 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

条件に基づいて、最後の行を除外することにより、データフレーム行をグループ化して平均化する

分類Dev

複数の列に基づいてデータフレームの最後の列に値を作成する

分類Dev

列の値に基づいてデータフレームの行をフィルタリングする

分類Dev

Sparkデータフレームscalaの列値に基づいて行をフィルタリングする

分類Dev

Pandasデータフレーム特定のグループと前の行の値に基づいて列に値を割り当てる方法

分類Dev

pandasデータフレームの条件に基づいて各グループの最後の行を削除する

分類Dev

基準に基づいてPython Pandasのデータフレームの最初の行を取得する

分類Dev

列名と最後の非 NaN 値に基づいて pandas データフレームを圧縮する

分類Dev

行の値の頻度に基づいてデータフレームをフィルタリングする

分類Dev

行の最初の値に基づいて、データフレームに新しい列を追加します

分類Dev

多くの列と値に基づいてデータフレームから行を取得します

分類Dev

別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

分類Dev

別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

分類Dev

グループ化に基づいてデータフレーム内の最新の非NA値を抽出する

分類Dev

他の値に基づいてデータフレームの1つの行の値を取得する

分類Dev

パンダ:条件に基づいてデータフレームグループの最後の行を削除します

分類Dev

Pythonで配列の値に基づいてデータフレームをフィルタリングする

分類Dev

Pythonの列の類似性に基づいてデータフレームをグループ化する

分類Dev

列の最大のインデックスと値に基づいて、データフレームの行をフィルタリングします

分類Dev

Pandasデータフレームから、他の列のグループ化と最大値に基づいて特定の列値を返します

分類Dev

列の値に基づいてデータ フレームの行の値をマージする

分類Dev

2つの日時値に基づいてデータフレームをグループ化する

分類Dev

データフレームでグループ化して並べ替え、その後、基準に基づいて最初の出現を見つけます

分類Dev

個別のデータフレーム内の行と列の値に基づいてデータフレームをスライスする

分類Dev

別のデータフレームの値に基づいてデータフレームの行と列を削除する

分類Dev

パンダは、マスク列のゼロ(0)との間のすべての行を取得し、各グループの最初と最後の行を取得するデータフレーム

分類Dev

ソースとしてのベクトルに基づいて、データフレームの列と行の欠落値を補完する方法

分類Dev

一部の列を失うことなく、グループ条件に基づいてデータフレームから行を削除する方法

分類Dev

列値pythonに基づいて複数のデータフレーム行にフラグを立てる方法

Related 関連記事

  1. 1

    条件に基づいて、最後の行を除外することにより、データフレーム行をグループ化して平均化する

  2. 2

    複数の列に基づいてデータフレームの最後の列に値を作成する

  3. 3

    列の値に基づいてデータフレームの行をフィルタリングする

  4. 4

    Sparkデータフレームscalaの列値に基づいて行をフィルタリングする

  5. 5

    Pandasデータフレーム特定のグループと前の行の値に基づいて列に値を割り当てる方法

  6. 6

    pandasデータフレームの条件に基づいて各グループの最後の行を削除する

  7. 7

    基準に基づいてPython Pandasのデータフレームの最初の行を取得する

  8. 8

    列名と最後の非 NaN 値に基づいて pandas データフレームを圧縮する

  9. 9

    行の値の頻度に基づいてデータフレームをフィルタリングする

  10. 10

    行の最初の値に基づいて、データフレームに新しい列を追加します

  11. 11

    多くの列と値に基づいてデータフレームから行を取得します

  12. 12

    別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

  13. 13

    別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

  14. 14

    グループ化に基づいてデータフレーム内の最新の非NA値を抽出する

  15. 15

    他の値に基づいてデータフレームの1つの行の値を取得する

  16. 16

    パンダ:条件に基づいてデータフレームグループの最後の行を削除します

  17. 17

    Pythonで配列の値に基づいてデータフレームをフィルタリングする

  18. 18

    Pythonの列の類似性に基づいてデータフレームをグループ化する

  19. 19

    列の最大のインデックスと値に基づいて、データフレームの行をフィルタリングします

  20. 20

    Pandasデータフレームから、他の列のグループ化と最大値に基づいて特定の列値を返します

  21. 21

    列の値に基づいてデータ フレームの行の値をマージする

  22. 22

    2つの日時値に基づいてデータフレームをグループ化する

  23. 23

    データフレームでグループ化して並べ替え、その後、基準に基づいて最初の出現を見つけます

  24. 24

    個別のデータフレーム内の行と列の値に基づいてデータフレームをスライスする

  25. 25

    別のデータフレームの値に基づいてデータフレームの行と列を削除する

  26. 26

    パンダは、マスク列のゼロ(0)との間のすべての行を取得し、各グループの最初と最後の行を取得するデータフレーム

  27. 27

    ソースとしてのベクトルに基づいて、データフレームの列と行の欠落値を補完する方法

  28. 28

    一部の列を失うことなく、グループ条件に基づいてデータフレームから行を削除する方法

  29. 29

    列値pythonに基づいて複数のデータフレーム行にフラグを立てる方法

ホットタグ

アーカイブ