93191


**〇実行環境**  
Windows 10  
Python 3.X  
pandas

こちらのリンクでの質問内容の続きになります。  
[pandasでの特定の条件下でのデータ取得ができない。](https://ja.stackoverflow.com/questions/93032/pandas%E3%81%A7%E3%81%AE%E7%89%B9%E5%AE%9A%E3%81%AE%E6%9D%A1%E4%BB%B6%E4%B8%8B%E3%81%A7%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%96%E5%BE%97%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84?noredirect=1#comment106234_93032)

**〇リンク先の質問**  
上記のリンクではpandasを使用して各idがカラムのどの「分類」に属しているかの質問をし、groupbyを使用して、各idごとの分類と数値を取得することができました。

**〇質問内容**  
下記のdfを **加工したいデータ** に加工したいと考えています。  
以前の質問のデータと違う点は2点あります。  
一つ目は分類にtype4があること。  
もう一つはidと分類が1対1ではなく、一つのidに対して分類が複数  
あるものがあるということです。  
下記のdfにはidのcccに二つの分類があると思います。

今回のデータでは四つの分類がありますが、取得したいデータは  
type1,type2,type3の三つにしぼりたいと考えています。

また、一つのidに対して、複数の分類がある場合にはそれらすべてを取得したいと考えています。(type4は取得しない)

以前の質問では一つのidに対して一つの分類でしたので、groupbyを使用することでデータを取得することができましたが、複数ある場合はgroupbyでのデータ取得は難しいのではと考えています。

地道にデータを取得することも考えたのですが、このような場合でも  
グルーピング化をして取得する方法があるかが気になり、質問させていただきました。  
今回のデータの場合にもグルーピング化を使用してデータ取得をすることはできるのでしょうか？  
それとも、地道に取得せざる終えないのでしょうか？

**df(区切りが見やすいよう、csv形式にしています。）**

[code]

    id, 数値, 分類
    aaa,,type2
    aaa,,
    aaa,111,type4
    bbb,,
    bbb,,type1
    bbb,222,
    ccc,,type3
    ccc,,
    ccc,,type1
    ccc,333
    ddd,,
    ddd,,
    ddd,1234,type2
    
[/code]

**加工したいデータ**

[code]

    id, 数値, 分類
    aaa,111,type2
    bbb,222,type1
    ccc,333,type3
    ccc,333,type1
    ddd,1234,type2
    
[/code]


CC BY-SA 4.0
2023-01-05T02:17:58.607
93190
2023-01-05T03:25:23.507
47546
question
python pandas
pandas グルーピング化を使用してデータ取得ができるかが知りたい。

[code]

    typ = ('type1', 'type2', 'type3')
    dfx = df.groupby('id', group_keys=False)\
            .apply(lambda x: x.assign(数値=x.iloc[-1]['数値']).dropna())\
            .astype({'数値': int}).query('分類 in @typ').reset_index(drop=True)
    print(dfx)
    
[/code]


CC BY-SA 4.0
2023-01-05T03:25:23.507
93191
2023-01-05T03:25:23.507
47127
93190
answer