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

如何用Pandas将日期表头转为星期几并按任务+星期统计任务数?

解决方案

你可以通过以下简洁步骤实现需求:

  1. 读取CSV并重塑数据结构,过滤无效空值
  2. 将日期转换为对应星期名称
  3. 按姓名、任务+星期的组合做计数统计,最后格式化列名

完整代码如下:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('mycsv.csv')

# 重塑数据:把日期列转为行,提取姓名、日期、任务,过滤无任务的行
melted_df = df.melt(
    id_vars='Unnamed',
    var_name='date',
    value_name='assignment'
).dropna(subset=['assignment'])

# 将日期字符串转为星期英文名称(如Monday)
melted_df['weekday'] = pd.to_datetime(melted_df['date']).dt.day_name()

# 交叉统计:按姓名分组,统计每个任务在对应星期的数量
result = pd.crosstab(
    melted_df['Unnamed'],
    [melted_df['assignment'], melted_df['weekday']]
)

# 把多级列名合并成「任务 星期」的格式
result.columns = [' '.join(col) for col in result.columns]

# 重置索引,将姓名转为普通列(匹配你想要的输出格式)
result = result.reset_index().rename(columns={'Unnamed': 'Name'})

print(result)

关键说明:

  • dropna(subset=['assignment']):直接过滤掉任务为空的行,避免无效数据干扰统计
  • dt.day_name():自动识别日期格式并转换为完整星期名称,若需要缩写可改用dt.day_abbr
  • 用多级列做交叉统计后,通过字符串合并生成你需要的列名格式,空值会自动填充为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:47