と列a
がすでにソートされているが、ここでのアプローチだ -
df[np.append(np.diff(df['a'])>0,True)]
基本的な考え方は、私たちがソートされた列a
に沿って分化を行い、(>0)
との前向きな変化を探していることである与えますブール値の配列。ブール値配列の要素true
は、その列の「グループ」の終わりを示します。最後のグループの最後の要素に変更はないので、末尾のブール値の配列にTrue
要素を追加する必要があります。最後に、df
にそのようなブール値配列を使用して行を選択し、希望の出力を与えます。
別のアプローチは、それぞれのグループの最初に出現する要素のインデックスを与えるオプションの引数return_index
を使用してnp.unique
と示唆することができます。したがって、最後の要素で機能させるには、列a
を反転してnp.unique
を使用し、最初に出現するインデックスを取得してから、合計行数df
から減算します。最後に、df
のインデックスと最終出力のインデックスしたがって、実装は次のようになります - あなたはlast
でgroupby
を使用することができます
>>> df
a b x
0 1 26 46
1 1 17 32
2 1 12 65
3 1 31 96
4 1 34 10
5 1 7 80
6 1 64 50
7 1 0 34
8 1 93 28
9 2 18 92
10 2 59 22
11 2 87 31
>>> df[np.append(np.diff(df['a'])>0,True)]
a b x
8 1 93 28
11 2 87 31
>>> df.iloc[df.shape[0] - np.unique(df['a'][::-1],return_index=True)[1] - 1]
a b x
8 1 93 28
11 2 87 31
'a'は常にソートされていますか? – Divakar
@Divakar私の場合、はい。 – parchment