this questionをPythonで解決しようとしています。Pythonでベクトルのすべての値をフィルタリングするデータフレーム
ID = np.concatenate((np.repeat("A",5),
np.repeat("B",4),
np.repeat("C",2)))
Hour = np.array([0,2,5,6,9,0,2,5,6,0,2])
testVector = [0,2,5]
df = pd.DataFrame({'ID' : ID, 'Hour': Hour})
当社グループ行ID
することにより、我々はtestVector
でないすべての値がそのグループの列Hour
で発見されdf
からすべての行を削除します。
def all_in(x,y):
return all([z in list(x) for z in y])
to_keep = df.groupby(by='ID')['Hour'].aggregate(lambda x: all_in(x,testVector))
to_keep = list(to_keep[to_keep].index)
df = df[df['ID'].isin(to_keep)]
このコードをできるだけ短く効率的にしたいと考えています。改善のための提案または代替ソリューションのアプローチ?
ええ、最速のソリューションをお望みですか?あなたのデータフレームのサイズは? – jezrael
@Jezrael、この努力の主な目的は私のPythonコーディングを改善することです。だからあなたの答えをありがとう、何かから新しい何かを学んだ); – Florian
私はタイミングをテストし、 'ayhan'の解決策が最も速いようです:) – jezrael