LoginSignup
7
4

More than 1 year has passed since last update.

pandasで爆発

Last updated at Posted at 2019-08-28

pandasがバージョンアップして0.25になってました。新機能は何かしらんと思って調べると利便性が高そうな機能がexplode

使う場面としてはセルの中にカンマやパイプ区切りでデータが入っている場合。

df = 下記のdataframeでC列を値毎に分けたいもの。

A B C
a1 b1 c11,c12,c13,c14
a2 b2 c21,c22,c23
a3 b3 c31,c32,c34,c387

のような形。

!pip install pandas==0.25
df = pd.DataFrame([{'A':'a1','B':'b1','C':'c11,c12,c13,c14'},
                  {'A':'a2','B':'b2','C':'c21,c22,c23'},
                  {'A':'a3','B':'b3','C':'c31,c32,c34,c387'}])

0.24だと

df_temp = pd.DataFrame(df['C'].str.split(',',expand=True).stack())
pd.merge(df.reset_index(),df_temp.reset_index(),left_on='index', right_on='level_0').set_index('index').drop(columns=['C','level_0','level_1'])

としないといけなかったけど、

0.25なら

df.assign(C=df['C'].str.split(',')).explode('C')

とやればOK。便利!!
0.24でもっといい方法あるかもですが(^^;)
次はdplyrなどでの実現方法を検討しないと。

2021/6/14 なんか動作がおかしい場面に出くわしたので注意喚起。

2021/9/14追記:
参考で、R(dplyr)で同じような処理をする場合の書き方。こっちもわかりやすくていい。

explode_df <- df %>%
    mutate(C = strsplit(as.character(C), ",")) %>% 
    unnest(C)


7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4