groupbyオブジェクトのn番目の行、たとえば最後の行を削除します。 groupby.nth
groupbyのn番目の行を削除します
同様の方法でn番目の行を削除する方法、またはn番目の行以外のすべての行を削除する方法はありますか?
groupbyオブジェクトのn番目の行、たとえば最後の行を削除します。 groupby.nth
groupbyのn番目の行を削除します
同様の方法でn番目の行を削除する方法、またはn番目の行以外のすべての行を削除する方法はありますか?
すべてnth
の行のインデックスを検索し、選択することができますIndex.difference
ix
によって:最後のないすべての行が必要な場合は
import pandas as pd
df = pd.DataFrame({'A':[1,1,1,2,2,2],
'B':[4,5,6,7,8,9]})
print (df)
A B
0 1 4
1 1 5
2 1 6
3 2 7
4 2 8
5 2 9
print (df.ix[df.index.difference(df.groupby('A', as_index=False)['B'].nth(1).index)])
A B
0 1 4
2 1 6
3 2 7
5 2 9
idx = df.groupby('A', as_index=False)['B'].nth(1).index
print (idx)
Int64Index([1, 4], dtype='int64')
print (df.index.difference(idx))
Int64Index([0, 2, 3, 5], dtype='int64')
print (df.ix[df.index.difference(idx)])
A B
0 1 4
2 1 6
3 2 7
5 2 9
、使用GroupBy.tail
:
print (df.ix[df.index.difference(df.groupby('A')['B'].tail(1).index)])
A B
0 1 4
1 1 5
3 2 7
4 2 8
タイミング:
In [27]: %timeit (df.groupby('A').apply(lambda x: x.iloc[:-1, :]).reset_index(0, drop=True).sort_index())
100 loops, best of 3: 2.48 ms per loop
In [28]: %timeit (df.ix[df.index.difference(df.groupby('A')['B'].tail(1).index)])
1000 loops, best of 3: 1.29 ms per loop
In [29]: %timeit (df.ix[df.index.difference(df.groupby('A', as_index=False)['B'].nth(1).index)])
The slowest run took 4.42 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 1.48 ms per loop
あなたのデータフレームはdf
とします。
df.groupby(something_to_group_by).apply(lambda x: x.iloc[:-1, :]).reset_index(0, drop=True).sort_index()
あなたはいくつかのコードを投稿することができますか? –