首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python --如何将值排序为每周系列/数据格式?

Python --如何将值排序为每周系列/数据格式?
EN

Stack Overflow用户
提问于 2022-08-23 10:43:45
回答 3查看 51关注 0票数 2

我有如下所示的df:

代码语言:javascript
运行
复制
|User | Date      | Items|
|-----|-----------|------|
|x    | 2021/03/01| 3    |
|x    | 2021/03/09| 5    |
|y    | 2021/03/09| 11   |
|z    | 2021/03/17| 7    |

我想总结如下:

代码语言:javascript
运行
复制
|User | Week 1| Week 2| Week 3| Total|
|-----|-------|-------|-------|------|
|x    |   3   | 5     |   0   |   8  |
|y    |   0   | 11    |   0   |  11  |
|z    |   0   | 0     |   7   |   7  |

我做这件事最好的方法是什么?

抱歉,如果我格式化错误,我对此非常陌生-非常感谢

EN

回答 3

Stack Overflow用户

发布于 2022-08-23 11:24:56

假设你的一周是根据天数计算的:

代码语言:javascript
运行
复制
(df.assign(wom=pd.to_datetime(df['Date']).dt.day.floordiv(7).add(1))
   .pivot_table(index='User', columns='wom', values='Items',
                aggfunc='sum', fill_value=0, margins='columns')
   .add_prefix('Week ').rename(columns={'Week All': 'Total'})
   .iloc[:-1].reset_index().rename_axis(columns=None)
)

产出:

代码语言:javascript
运行
复制
  User  Week 1  Week 2  Week 3  Total
0    x       3       5       0      8
1    y       0      11       0     11
2    z       0       0       7      7
票数 1
EN

Stack Overflow用户

发布于 2022-08-23 11:19:50

代码:

我从某个地方复制了这份乐趣

代码语言:javascript
运行
复制
def week_number_of_month(date_value):
     return 'Week ' + str((date_value.isocalendar()[1] - date_value.replace(day=1).isocalendar()[1] + 1))

for idx, val in enumerate(df['Date']):
    df.loc[idx, 'Date'] = week_number_of_month(pd.to_datetime(val))

使用枢轴表,将列值转换为列

代码语言:javascript
运行
复制
df = df.pivot_table(values='Iteams', index=df.User, columns='Date', aggfunc='first').fillna(0)

df['Total'] = df[df.columns].sum(axis=1)
df

输出:

代码语言:javascript
运行
复制
Date    Week 1  Week 2  Week 3  Total
User                
x       3.0     5.0     0.0     8.0
y       0.0     11.0    0.0     11.0
z       0.0     0.0     7.0     7.0
票数 0
EN

Stack Overflow用户

发布于 2022-08-23 11:29:25

你可以试着计算一个月中的一个星期,然后再转一周。

代码语言:javascript
运行
复制
df.Date = pd.to_datetime(df.Date)

df['week'] = df.Date.dt.day//7+1

out = df[['User','Items','week']].pivot('User','week').fillna(0)
out = out.assign(total=out.sum(axis=1))

输出:

代码语言:javascript
运行
复制
      Items            total
week      1     2    3      
User                        
x       3.0   5.0  0.0   8.0
y       0.0  11.0  0.0  11.0
z       0.0   0.0  7.0   7.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73457286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档