如何用Pandas将日期表头转为星期几并按任务+星期统计任务数?
解决方案
你可以通过以下简洁步骤实现需求:
- 读取CSV并重塑数据结构,过滤无效空值
- 将日期转换为对应星期名称
- 按姓名、任务+星期的组合做计数统计,最后格式化列名
完整代码如下:
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
相关产品推荐
相关产品推荐

