You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现weekday列与周一至周日多列的数据互转?

Python实现weekday列与多列格式的互转

正向转换:将weekday列转为多列格式

借助pandas的哑变量生成和分组求和功能,将单个weekday列转换为按星期拆分的多列标记格式:

import pandas as pd

# 构造输入数据
data = {
    'buyer': ['A', 'A', 'B', 'B', 'B', 'C'],
    'weekday': ['Saturday', 'Friday', 'Monday', 'Tuesday', 'Thursday', 'Monday']
}
df = pd.DataFrame(data)

# 定义固定星期顺序,与期望结果匹配
week_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

# 生成星期哑变量,按buyer分组统计出现次数
df_dummies = pd.get_dummies(df['weekday'])
df_grouped = df.groupby('buyer')[df_dummies.columns].sum().reset_index()

# 将统计值替换为标记符,调整列顺序
df_result = df_grouped.replace({1: 'Y', 0: ''})
df_result = df_result[['buyer'] + week_order]

print(df_result)

输出结果:

buyer Monday Tuesday Wednesday Thursday Friday Saturday Sunday
0     A                                                                 Y       Y       
1     B     Y       Y                 Y                            
2     C     Y                                                        

反向转换:从多列格式转回weekday列

使用melt函数将宽表转长表,筛选标记为Y的记录即可恢复原始格式:

# 反向转换恢复原始数据结构
df_reversed = df_result.melt(
    id_vars='buyer',
    value_vars=week_order,
    var_name='weekday',
    value_name='flag'
)
# 过滤有效标记行,清理冗余列
df_reversed = df_reversed[df_reversed['flag'] == 'Y'].drop(columns='flag').reset_index(drop=True)

print(df_reversed)

输出结果:

buyer    weekday
0     B     Monday
1     C     Monday
2     B    Tuesday
3     B   Thursday
4     A     Friday
5     A   Saturday

内容的提问来源于stack exchange,提问作者ghostabx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:40:25