首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫中的独立群

大熊猫中的独立群
EN

Stack Overflow用户
提问于 2022-06-30 08:45:26
回答 2查看 54关注 0票数 2

我需要帮助熊猫群:

我有以下df:

代码语言:javascript
复制
A     B          C          D
04547 2022-07-04 2022-07-04 1000000
04547 2022-07-11 2022-07-11 1000000
04547 2022-08-08 2022-08-08 1000000
04547 2022-10-11 2022-10-11 0100000
04547 2022-10-18 2022-10-18 0100000
04547 2022-10-24 2022-10-24 1000000
04547 2022-11-01 2022-11-01 0100000
04547 2022-11-08 2022-11-08 0100000
04548 2022-10-11 2022-10-11 0100000
04548 2022-10-18 2022-10-18 0100000
04548 2022-10-24 2022-10-24 1000000
04548 2022-11-01 2022-11-01 0100000
04548 2022-11-08 2022-11-08 0100000

我需要的输出应该是:

代码语言:javascript
复制
    A           B           C        D
04547  2022-07-04  2022-08-08  1000000
04547  2022-10-11  2022-10-18  0100000
04547  2022-10-24  2022-10-24  1000000
04547  2022-11-01  2022-11-08  0100000
04548  2022-10-11  2022-10-18  0100000
04548  2022-10-24  2022-10-24  1000000
04548  2022-11-01  2022-11-08  0100000

但有:

代码语言:javascript
复制
a = {'A':'first','B':'first','C':'last','D':'first'}
df = df.groupby(['A','D']).agg(a)

A     B          C          D
4547 2022-10-11 2022-11-08  0100000
4547 2022-07-04 2022-10-24  1000000
4548 2022-10-11 2022-11-08  0100000
4548 2022-10-24 2022-10-24  1000000

因为当D列中的新序列开始为每一列A分离时,我不得不中断分组

EN

回答 2

Stack Overflow用户

发布于 2022-06-30 08:47:13

您可以使用df['D'].ne(df['D'].shift().cumsum()作为第D列的石斑鱼,以确保按连续值进行分组(shift允许您访问上一行值):

代码语言:javascript
复制
a = {'A':'first','B':'first','C':'last','D':'first'}
out = (df.groupby(['A', df['D'].ne(df['D'].shift()).cumsum()],
                  as_index=False)
         .agg(a)
      )

产出:

代码语言:javascript
复制
       A           B           C        D
0  04547  2022-07-04  2022-08-08  1000000
1  04547  2022-10-11  2022-10-18  0100000
2  04547  2022-10-24  2022-10-24  1000000
3  04547  2022-11-01  2022-11-08  0100000
4  04548  2022-10-11  2022-10-18  0100000
5  04548  2022-10-24  2022-10-24  1000000
6  04548  2022-11-01  2022-11-08  0100000
票数 0
EN

Stack Overflow用户

发布于 2022-06-30 08:48:38

如果需要按A,D列的连续值分组,则使用DataFrame.shifted值comapre表示DataFrame.ne不相等,DataFrame.any表示Series,然后按Series.cumsum添加累积和

代码语言:javascript
复制
g = df[['A','D']].ne(df[['A','D']].shift()).any(1).cumsum()
a = {'A':'first','B':'first','C':'last','D':'first'}
df = df.groupby(g).agg(a)
print (df)
       A           B           C        D
1  04547  2022-07-04  2022-08-08  1000000
2  04547  2022-10-11  2022-10-18  0100000
3  04547  2022-10-24  2022-10-24  1000000
4  04547  2022-11-01  2022-11-08  0100000
5  04548  2022-10-11  2022-10-18  0100000
6  04548  2022-10-24  2022-10-24  1000000
7  04548  2022-11-01  2022-11-08  0100000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72812800

复制
相关文章

相似问题

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