Pythonにおいて、変数名に変数を入れて、新しいリストを作る方法
python初心者です。Polarsの勉強をしています。とある参考書に記載されたデータフレームの結合方法について、理解できなかった箇所があったため、解決したく質問させてください
やりたいこと
以下3つのデータフレームを使って、顧客単位で利用したホテル種別を集計したいと考えています
df_a(ホテルごとの予約情報)
┌────────────────┬─────────────┬──────────┐
│ reservation_id ┆ customer_id ┆ hotel_id │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞════════════════╪═════════════╪══════════╡
│ 1 ┆ 53431 ┆ 2460 │
│ 2 ┆ 488390 ┆ 962 │
│ 3 ┆ 341335 ┆ 558 │
│ 4 ┆ 398981 ┆ 3666 │
│ 5 ┆ 220381 ┆ 2180 │
│ … ┆ … ┆ … │
│ 1999996 ┆ 280303 ┆ 2357 │
│ 1999997 ┆ 499387 ┆ 319 │
│ 1999998 ┆ 461799 ┆ 2834 │
│ 1999999 ┆ 163568 ┆ 3643 │
│ 2000000 ┆ 449765 ┆ 820 │
└────────────────┴─────────────┴──────────┘
df_b(ホテル種別)
┌──────────┬────────────────┐
│ hotel_id ┆ hotel_type │
│ --- ┆ --- │
│ i64 ┆ str │
╞══════════╪════════════════╡
│ 1 ┆ ビジネスホテル │
│ 2 ┆ リゾートホテル │
│ 3 ┆ 民宿 │
│ 4 ┆ 民宿 │
│ 5 ┆ ビジネスホテル │
│ … ┆ … │
│ 4996 ┆ 旅館 │
│ 4997 ┆ 旅館 │
│ 4998 ┆ 旅館 │
│ 4999 ┆ ビジネスホテル │
│ 5000 ┆ 民宿 │
└──────────┴────────────────┘
df_c(宿泊者の情報)
┌─────────────┬─────────────┬─────┬──────┬────────────────────┬──────────────┬────────────────┬─────────────────┐
│ customer_id ┆ name ┆ age ┆ sex ┆ address_prefecture ┆ address_city ┆ address_town ┆ address_zipcode │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 ┆ str ┆ str ┆ str ┆ str ┆ str │
╞═════════════╪═════════════╪═════╪══════╪════════════════════╪══════════════╪════════════════╪═════════════════╡
│ 1 ┆ 山田 裕太 ┆ 75 ┆ null ┆ 岐阜県 ┆ 岐阜市 ┆ 鷺山清洲町 ┆ 502-0853 │
│ 2 ┆ 藤井 稔 ┆ 83 ┆ M ┆ 大阪府 ┆ 豊能郡能勢町 ┆ 地黄 ┆ 563-0121 │
│ 3 ┆ 青木 太一 ┆ 62 ┆ M ┆ 佐賀県 ┆ 佐賀市 ┆ 本庄町袋 ┆ 840-0023 │
│ 4 ┆ 渡辺 裕太 ┆ 28 ┆ M ┆ 福島県 ┆ 喜多方市 ┆ 豊川町高堂太 ┆ 966-0911 │
│ 5 ┆ 渡辺 明美 ┆ 62 ┆ F ┆ 兵庫県 ┆ 西宮市 ┆ 津門西口町 ┆ 663-8231 │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ 499996 ┆ 高橋 洋介 ┆ 26 ┆ M ┆ 山形県 ┆ 山形市 ┆ 下東山 ┆ 990-2232 │
│ 499997 ┆ 山口 治 ┆ 42 ┆ M ┆ 岩手県 ┆ 一関市 ┆ 室根町津谷川 ┆ 029-1211 │
│ 499998 ┆ 石井 拓真 ┆ 39 ┆ M ┆ 山形県 ┆ 山形市 ┆ 桜ケ丘 ┆ 990-2376 │
│ 499999 ┆ 坂本 くみ子 ┆ 66 ┆ F ┆ 群馬県 ┆ 富岡市 ┆ 曽木 ┆ 370-2315 │
│ 500000 ┆ 前田 聡太郎 ┆ 49 ┆ null ┆ 兵庫県 ┆ 姫路市 ┆ 広畑区西夢前台 ┆ 671-1103 │
└─────────────┴─────────────┴─────┴──────┴────────────────────┴──────────────┴────────────────┴─────────────────┘
実行手順
第1ステップとしてdf_aとdf_bそれぞれのhotel_idをキーとして、left joinします。(これの結果をdf_dとします)
df_d = df_a.join(df_b,on = 'hotel_id', how = 'left')
print(f.collect().sort('customer_id'))
df_dの実行結果
┌────────────────┬─────────────┬──────────┬────────────────┐
│ reservation_id ┆ customer_id ┆ hotel_id ┆ hotel_type │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ str │
╞════════════════╪═════════════╪══════════╪════════════════╡
│ 12086 ┆ 1 ┆ 1282 ┆ 民宿 │
│ 490012 ┆ 1 ┆ 563 ┆ 民宿 │
│ 1009449 ┆ 1 ┆ 188 ┆ 旅館 │
│ 1307084 ┆ 1 ┆ 3688 ┆ 民宿 │
│ 1312786 ┆ 1 ┆ 4284 ┆ ビジネスホテル │
│ … ┆ … ┆ … ┆ … │
│ 255571 ┆ 500000 ┆ 63 ┆ リゾートホテル │
│ 590942 ┆ 500000 ┆ 1815 ┆ リゾートホテル │
│ 1404470 ┆ 500000 ┆ 3002 ┆ ビジネスホテル │
│ 1432744 ┆ 500000 ┆ 1769 ┆ 旅館 │
│ 1575573 ┆ 500000 ┆ 2339 ┆ ビジネスホテル │
└────────────────┴─────────────┴──────────┴────────────────┘
第2ステップとして、df_dのcustomer_idを集約して、reservation_idごとにhotel_typeを集計します(これの結果をdf_eとします)これのコードに不明点がございます。
df_e = df_d.group_by('customer_id').agg([
pl.col('reservation_id').filter(pl.col('hotel_type') == 'ビジネスホテル').len().alias('business_hotel_count'),
pl.col('reservation_id').filter(pl.col('hotel_type') == 'リゾートホテル').len().alias('resort_hotel_count'),
pl.col('reservation_id').filter(pl.col('hotel_type') == '民宿').len().alias('minsyuku_count'),
pl.col('reservation_id').filter(pl.col('hotel_type') == '旅館').len().alias('ryokan_count')
])
df_eの実行結果
┌────────────────┬─────────────┬──────────┬────────────────┐
│ reservation_id ┆ customer_id ┆ hotel_id ┆ hotel_type │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ str │
╞════════════════╪═════════════╪══════════╪════════════════╡
│ 12086 ┆ 1 ┆ 1282 ┆ 民宿 │
│ 490012 ┆ 1 ┆ 563 ┆ 民宿 │
│ 1009449 ┆ 1 ┆ 188 ┆ 旅館 │
│ 1307084 ┆ 1 ┆ 3688 ┆ 民宿 │
│ 1312786 ┆ 1 ┆ 4284 ┆ ビジネスホテル │
│ … ┆ … ┆ … ┆ … │
│ 255571 ┆ 500000 ┆ 63 ┆ リゾートホテル │
│ 590942 ┆ 500000 ┆ 1815 ┆ リゾートホテル │
│ 1404470 ┆ 500000 ┆ 3002 ┆ ビジネスホテル │
│ 1432744 ┆ 500000 ┆ 1769 ┆ 旅館 │
│ 1575573 ┆ 500000 ┆ 2339 ┆ ビジネスホテル │
└────────────────┴─────────────┴──────────┴────────────────┘
第3ステップとして、df_cとdf_eそれぞれのcustomer_idをキーとして、left joinします。※質問に触れる箇所ではないため、コードと出力結果は省略します
解決したいこと
第2ステップのソースコードで、reservation_id
が出現していますが、これは何の目的で使用しているのでしょうか。唐突に出てきたため、理解できずにいます
0 likes