Open1

Pythonで始める数理最適化

silvasilva

第4章 割引クーポンキャンペーンの効果最大化

<その他>

pivot_tableの使い方

詳しくは公式ドキュメントを参照

import pandas as pd

# サンプルデータの作成
data = {
    "fruit": ["apple", "banana", "apple", "banana", "apple", "banana"],
    "city": ["Tokyo", "Tokyo", "Osaka", "Osaka", "Kyoto", "Kyoto"],
    "sales": [100, 200, 150, 300, 200, 400],
    "profits": [10, 20, 15, 30, 20, 40]
}
df = pd.DataFrame(data)

# dfの中身
"""
    fruit   city  sales  profits
0   apple  Tokyo    100       10
1  banana  Tokyo    200       20
2   apple  Osaka    150       15
3  banana  Osaka    300       30
4   apple  Kyoto    200       20
5  banana  Kyoto    400       40
"""

# pivot_tableの使用
pivot_df = df.pivot_table(
    index="fruit",  # 行のインデックス
    columns="city",  # 列のインデックス
    values="sales",  # 集計する値
    aggfunc="sum"  # 集計方法
)

print(pivot_df)
# 出力結果
city    Kyoto  Osaka  Tokyo
fruit
apple     200    150    100
banana    400    300    200

meltの使い方

公式ドキュメント

import pandas as pd

# サンプルデータの作成
data = {
    "Day": ["Monday", "Tuesday", "Wednesday"],
    "Tokyo": [15, 20, 18],
    "Osaka": [10, 12, 14],
    "Kyoto": [8, 9, 11]
}
df = pd.DataFrame(data)

# dfの中身
"""
         Day  Tokyo  Osaka  Kyoto
0     Monday     15     10      8
1    Tuesday     20     12      9
2  Wednesday     18     14     11
"""

# meltの使用
melted_df = df.melt(
    id_vars="Day",  # 保持する列
    var_name="City",  # 変数名を格納する列の名前
    value_name="Temperature"  # 値を格納する列の名前
)

print(melted_df)
# 出力結果
         Day   City  Temperature
0     Monday  Tokyo           15
1    Tuesday  Tokyo           20
2  Wednesday  Tokyo           18
3     Monday  Osaka           10
4    Tuesday  Osaka           12
5  Wednesday  Osaka           14
6     Monday  Kyoto            8
7    Tuesday  Kyoto            9
8  Wednesday  Kyoto           11