質問: WEB上でスクレイピングしてきた以下のような整形前のテーブルがあります。このテーブルを整形後のテーブルのように、日付を紐づけて並べ替えたいのですが、どういったコードを書けば良いのでしょうか?よろしくお願いします。 ### 整形前 | 会場 | 最寄駅 | 時間 | | --- | --- | --- | | 2018/09/01 | | | | 青山△△ | 青山一丁目 | AM10:00 | | 渋谷〇〇センター | 渋谷 | AM9:00 | | 2018/09/02 | | | | 青山△△ | 青山一丁目 | AM10:00 | | 渋谷〇〇センター | 渋谷 | AM9:00 | | 新宿×× | 新宿 | AM10:00 | | 2018/09/03 | | | | 新宿×× | 新宿 | AM10:00 | ### 整形後 | 日付 | 時間 | 会場 | 最寄駅 | | --- | --- | --- | --- | | 2018/09/01 | AM9:00 | 渋谷〇〇センター | 渋谷 | | 2018/09/01 | AM10:00 | 青山△△ | 青山一丁目 | | 2018/09/02 | AM9:00 | 渋谷〇〇センター | 渋谷 | | 2018/09/02 | AM10:00 | 青山△△ | 青山一丁目 | | 2018/09/02 | AM10:00 | 新宿×× | 新宿 | | 2018/09/03 | AM10:00 | 新宿×× | 新宿 |
回答: 書いてみました こんな感じでどうでしょうか ``` import pandas as pd import io data = """ 会場 最寄駅 時間 2018/09/01 青山△△ 青山一丁目 AM10:00 渋谷〇〇センター 渋谷 AM9:00 2018/09/02 青山△△ 青山一丁目 AM10:00 渋谷〇〇センター 渋谷 AM9:00 新宿×× 新宿 AM10:00 2018/09/03 新宿×× 新宿 AM10:00 """ df = pd.read_table(io.StringIO(data)) # '最寄駅' が NaN の場所に基づきグループ分け('Group'列生成) df['Group'] = (df['最寄駅'].isna()).cumsum() # 各グループの'会場'列の先頭を'日付'列として追加 df['日付'] = df.groupby('Group')['会場'].transform(lambda d: d.iloc[0]) # 移行はデータフレームの整理 # 日付のみの行を削除 df = df.dropna() # Group列は不要なので削除してIndexを振りなおす df = df.drop(columns=['Group']).reset_index(drop=True) print(df) # 会場 最寄駅 時間 日付 #0 青山△△ 青山一丁目 AM10:00 2018/09/01 #1 渋谷〇〇センター 渋谷 AM9:00 2018/09/01 #2 青山△△ 青山一丁目 AM10:00 2018/09/02 #3 渋谷〇〇センター 渋谷 AM9:00 2018/09/02 #4 新宿×× 新宿 AM10:00 2018/09/02 #5 新宿×× 新宿 AM10:00 2018/09/03 ```