test = pd.DataFrame({'injury':['A', 'B', 'B', 'A', 'A', 'C', 'A', 'B', 'A'], 'crash_drinking':[1, 1, 1, 0, 0, 0, 1, 0, 1], 'crash_drugs':[0,0,0,1,1,0,0,1,1], 'driver_drinking':[1,1,0,0,0,0,0,1,0], 'driver_drugged':[0,0,0,0,1,0,0,1,0]})
crash_drinking crash_drugs driver_drinking driver_drugged injury
0 1 0 1 0 A
1 1 0 1 0 B
2 1 0 0 0 B
3 0 1 0 0 A
4 0 1 0 1 A
5 0 0 0 0 C
6 1 0 0 0 A
7 0 1 1 1 B
8 1 1 0 0 A
て複雑なフィルタが、私は私の出力は、(列名は、上記のデータフレームと区別するために変更されている)、このようなものを見てみたい:パンダ:GROUPBY
drinking crash drinking driver in crash drugged crash drugged driver in crash
A 2 1 2 1
B 2 1 1 0
場合は、最初の行、"injury" = 'A'
ため、以下のフィルタが配置されています:
「飲酒クラッシュ」は、カウントです。crash_drinking = 1
およびcrash_drugs = 0
;
「飲酒運転のクラッシュ」は、crash_drinking = 1
,crash_drugs = 0
,driver_drinking = 1,
およびdriver_drugs is 0
です。
crash_drinking = 0
とcrash_drugs = 1;
は "クラッシュにドライバを薬漬け" 場合
"がクラッシュを薬漬け" である場合crash_drinking = 0
、crash_drugs = 1
、driver_drinking = 0,
及びdriver_drugs = 1
あります。 B列のための同じ
、"injury" = 'B'.
は、今私はセットアップの.locフィルタの束を持っているところだ除い:
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0)]
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 0) & (test['crash_drugs'] == 1)]
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0) & (test['driver_drinking'] == 1) & (test['driver_drugged'] == 0)]
等
私はむしろこれを行うと思いますgroupby、または.apply()を使用すると、すべてのクエリをループするよりも速くなると思います。しかし、私はそれを行うための適切な構文が不明です。たぶん私は "負傷者"の列の.groupby()を実行し、そこから行くべきでしょうか?
データフレームのあなたの定義は、(列名が異なっている)その表現と一致していません。 –
希望する出力の列が入力と異なることを意味しますか?新しい列は元の列と同じではなく、列の組み合わせであるため、それらを区別したいと考えました。私はそれらを元に戻すことができますが、同じであればもっと混乱すると思いました。 – ale19
いいえ、コードの最初の行とその直後に表示されるデータフレームを見てください。列名が異なるため、混乱します。 –