首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas按从df底部开始的n行分组

Pandas按从df底部开始的n行分组
EN

Stack Overflow用户
提问于 2021-05-11 21:43:43
回答 2查看 41关注 0票数 1

我有以下df:

代码语言:javascript
运行
复制
Week    Sales
1        10
2        15
3        10
4        20
5        20
6        10
7        15
8        10

我想每3周分组一次,总结一下销售情况。我想从最差的3周开始。如果顶部只剩下不到3周的时间,则应忽略这些周。所需的输出如下:

代码语言:javascript
运行
复制
Week    Sales
5-3       50
8-6       35

我在我原来的df df.reset_index(drop=True).groupby(by=lambda x: x/N, axis=0).sum()上尝试了这个方法,但是这个解决方案并不是从最底层开始的。

有谁能给我指个方向吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-11 21:44:48

您可以尝试使用.iloc[::-1]对数据进行反转

代码语言:javascript
运行
复制
N=3
(df.iloc[::-1].groupby(np.arange(len(df))//N)
   .agg({'Week': lambda x: f'{x.iloc[0]}-{x.iloc[-1]}',
         'Sales': 'sum'
        })
)

输出:

代码语言:javascript
运行
复制
  Week  Sales
0  8-6     35
1  5-3     50
2  2-1     25
票数 3
EN

Stack Overflow用户

发布于 2021-05-11 23:11:02

在处理时段聚合时,我通常使用.resample,因为它在将不同时段的数据打包时是可修复的

代码语言:javascript
运行
复制
import io
from datetime import timedelta
import pandas as pd

dataf = pd.read_csv(io.StringIO("""Week  Sales
1   10
2   15
3   10
4   20
5   20
6   10
7   15
8   10"""), sep='\s+',).astype(int)

# reverse data and transform int weeks to actual date time 

dataf = dataf.iloc[::-1]
dataf['Week'] = dataf['Week'].map(lambda x: timedelta(weeks=x))

# set date object to index for resampling
dataf = dataf.set_index('Week')

# now we resample
dataf.resample('21d').sum() # 21days

::*注意:该标签具有误导性。而设置kind='period'确实会引发错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67488044

复制
相关文章

相似问题

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