次のように私はパンダのデータフレームを持っていますすべきではないCOL_1
とCOL_2
を(VAL_1
:列によって行をフィルタリング自動化する方法
df =
COL_1 COL_2 VAL_1
ABC AAA ABC
CDE CDE RTY
ABC ABC RTY
ABC RTY DEF
は私がCOL
で始まる列から任意の一意の値を含む行の数をcaculateしたいです中古)。
期待される結果である:
GROUP COUNT
ABC 3
CDE 2
RTY 1
AAA 1
一つの可能性は、手動で列名を指定して、手動GROUP
ためのすべての可能な値を指定する行数を計算することです。しかし、明らかに、GROUP
の列と値の数が多い場合、この解決法は良くありません。
自動的に行う方法は?私はアプローチは、COL
で始まる列のtunique値を持つすべての行をフィルタすることであると思いますか?
私はこれを試しましたが、1Gbのデータセットでは時間がかかり、間違った結果が得られます。また、私はGROUP
の値を指定することを避ける方法を知らない:str.contains('ABC')
。
t_cols = [c for c in df.columns.values if not c.startswith('COL')]
aa = df.drop(t_cols,axis=1)
aa.apply(lambda row: row.astype(str).str.contains('ABC').any(), axis=1).shape
をええ、このソリューションは良いです! :) – MaxU
これは素晴らしい解決策です。ところで、このコードに条件を追加する方法を知っていますか?行を数える必要がある場合は、列 'VAL_1'の値が' ABC'と同じであることを考慮して、どういう意味でしょうか? – Dinosaurius
あなたが持っている行の数を数えたい場合は、 'shape [0]'を使うことができます。また、論理的なインデックスを使って条件付きの行を選択することもできます。構文は 'df [df.VAL_1 ==" ABC "]。filter(regex ="^COL ")。shape [0]'のようなものになります。 – Psidom