前提・実現したいこと
もしご存じでしたらお教えください。実行環境はwindows 10 Prof上で動作するPython 3.7 + Pandas 1.0.5です。AnacondaのSpyderで動かしています。df_aからdf_bのデータに変換したいのですが、
どうpandasを書いてよいのかわからなくなってしまいました。
以下のようなdf_aを持っています。
df_a DataFrame:
col_1 col_2 col_3 col_4
0 start genre_start sociology none
1 pos_1 Auguste Comte aa none
2 pos_2 Durkheim ab none
3 pos_3 Marx ac none
4 pos_4 Spencer ad end_of_cat
5 start genre_start history none
6 pos_1 Cato the Elder db none
7 pos_2 David Hume db none
8 pos_3 Richard L. Hills fh end_of_cat
9 start genre_start mathmatics none
10 pos_1 John von Neumann fd none
11 pos_2 John Nash ge end_of_cat
上のデータを以下のようにdf_bにしたいと思っております。
df_b DataFrame
col_1 col_3 col_6
0 pos_1 Auguste Comte sociology
1 pos_2 Durkheim sociology
2 pos_3 Marx sociology
3 pos_4 Spencer sociology
4 pos_1 Cato the Elder history
5 pos_2 David Hume history
6 pos_3 Richard L. Hills history
7 pos_1 John von Neumann mathmatics
8 pos_2 John Nash mathmatics
###加工ルール
A. df_aからdf_bの加工には以下のルールがあります。
Col_1にはstart, col_4にend_of_catがあり、col3にジャンル(SociologyやHistoryなど)が
あれば、start からend_of_catの間のcol_2(Augste ComteやDurkheimなどの名前)にはジャンルが名
をつけたいです。
B. ジャンル名(Sociology, Historyなどは不特定多数です。
c. 名前(Auguste ComteやJohn Nash)などは不特定多数です。
該当のソースコード(df_a及びdf_bのサンプルデータ)
#df_a
df_a = pd.DataFrame ({'col_1':['start','pos_1','pos_2','pos_3','pos_4','start','pos_1','pos_2','pos_3','start','pos_1','pos_2'],
'col_2':['genre_start','Auguste Comte','Durkheim','Marx','Spencer','genre_start','Cato the Elder','David Hume','Richard L. Hills','genre_start','John von Neumann','John Nash'],
'col_3':['sociology','aa','ab','ac','ad','history','db','db','fh','mathmatics','fd','ge'],
'col_4':['none','none','none','none','end_of_cat','none','none','none','end_of_cat','none','none','end_of_cat']},
index = [0,1,2,3,4,5,6,7,8,9,10,11])
#df_b
df_b = pd.DataFrame({'col_1':['pos_1','pos_2','pos_3','pos_4','pos_1','pos_2','pos_3','pos_1','pos_2'],
'col_3':['Auguste Comte','Durkheim','Marx','Spencer','Cato the Elder','David Hume','Richard L. Hills','John von Neumann','John Nash'],
'col_6':['sociology','sociology','sociology','sociology','history','history','history','mathmatics','mathmatics']},
index = [0,1,2,3,4,5,6,7,8])
試したこと
最初はList化してトライしましたが、訳が分からなくなりました。
DataFrame化したのですが、シーケンス型のようになってしまい、余計に難しくなってしまいました。
補足情報(FW/ツールのバージョンなど)
OS: windows 10 Prof
Anaconda: Python 3.7 + Pandas 1.0.5
IDE: Spyder
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 10:24