如何用Python将DataFrame的日期时间列透视转换为按月份拆分的列
Python实现方案
- 第一步:导入依赖库
import pandas as pd
- 第二步:构造测试数据(实际使用时替换为读取自己的数据集即可,比如
pd.read_csv('你的文件路径.csv'))
data = { 'Product': ['00001', '00002', '00003', '00001', '00002', '00003'], 'Arrive Time': ['2021-1-25', '2021-2-25', '2021-3-25', '2021-4-25', '2021-4-25', '2021-3-10'] } df = pd.DataFrame(data)
- 第三步:数据预处理,转换日期格式并提取月份信息
# 转换到货时间列为datetime格式 df['Arrive Time'] = pd.to_datetime(df['Arrive Time']) # 提取月份数字用于保证列的自然顺序 df['month_num'] = df['Arrive Time'].dt.month
- 第四步:生成透视表并按需求调整格式
# 生成透视表,统计每个产品每月的到货次数 pivot_df = df.pivot_table( index='Product', columns='month_num', values='Arrive Time', aggfunc='count', fill_value=0 ) # 将列名从数字替换为月份英文全称 pivot_df.columns = pd.to_datetime(pivot_df.columns, format='%m').month_name() # 替换值:到货次数大于0标记为Yes,否则标记为na pivot_df = pivot_df.map(lambda x: 'Yes' if x > 0 else 'na').reset_index()
- 补充说明:如果数据集包含多个年份,需要区分不同年份的同月份到货记录,可修改月份提取逻辑为:
df['year_month'] = df['Arrive Time'].dt.strftime('%Y-%B') # 后续透视表的columns参数改为'year_month'即可
内容的提问来源于stack exchange,提问作者PaulCoder
相关产品推荐
相关产品推荐

