任意列から条件を満たす行を順序を維持して選択

How to maintain order when selecting rows in pandas dataframe? – StackOverflow

pandas.Index.get_indexerを用いた方法は一見エレガントにみえるが,重複があるとInvalidIndexErrorになる.numpy.argsort+numpy.searchsortedは,時間効率は良いが,重複を処理できないので,条件と比較したい任意列をset_indexしてpandas.DataFrame.locでアクセスする方がリーズナブル.

import pandas as pd


lst = [
    ['car', 1], 
    ['bike', 3],
    ['jewel', 2], 
    ['tv', 5], 
    ['phone', 6]
]
m = ['tv', 'car', 'phone']

df = pd.DataFrame(lst, columns=['items','quantity'])
display(df.query('items in @m'))
display(df.set_index('items').loc[m])
    items   quantity
0   car 1
3   tv  5
4   phone   6

    quantity
items   
tv  5
car 1
phone   6
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください