我有一个Pandas 的藤壶.我需要根据列值分组.

State   Dates      Sales_Amt
A       1/1/2023     123
A       2/1/2023     123
A       3/1/2023     321
A       4/1/2023     321
A       5/1/2023     123
A       6/1/2023     123
A       7/1/2023     123
B       1/1/2023     456
B       2/1/2023     456
B       3/1/2023     456
B       4/1/2023     789
B       5/1/2023     789
B       6/1/2023     789
B       7/1/2023     123
B       8/1/2023     123

但是,如果有下一个组值与前一个分组值相同,则需要将其作为新组分开.

State   Start_Dates  End_Dates   Sales_Amt
A       1/1/2023     2/1/2023       123
A       3/1/2023     4/1/2023       321
A       5/1/2023     7/1/2023       123 
B       1/1/2023     3/1/2023       456
B       4/1/2023     6/1/2023       789
B       7/1/2023     8/1/2023       123

怎样才能得到上面的结果?

我试过下面的代码,但它只适用于B组,而不适用于A组

df = (df.groupby(['State','Sales_Amt'],group_keys=True)
        .agg(Start_Dates=('Dates', np.min), 
             End_Dates=('Dates', np.max))
        .sort_values(['State','Start_Dates','End_Dates'],ascending=True)
        .reset_index()
     )

推荐答案

您需要添加一个额外的分组器来池连续的值:

# ensure datetime
df['Dates'] = pd.to_datetime(df['Dates'])

# add a grouper for consecutive values
group = (df['Sales_Amt'].ne(df.groupby('State')['Sales_Amt'].shift())
         .cumsum().rename('g')
        )

# groupby your columns + this grouper
out = (df.groupby(['State', 'Sales_Amt', group], group_keys=True)
         .agg(Start_Dates=('Dates', np.min), 
              End_Dates=('Dates', np.max))
         .sort_values(['State','Start_Dates','End_Dates'],ascending=True)
         .reset_index()
         .drop(columns='g') # remove the extra grouper (optional)
      )

输出:

  State  Sales_Amt Start_Dates  End_Dates
0     A        123  2023-01-01 2023-02-01
1     A        321  2023-03-01 2023-04-01
2     A        123  2023-05-01 2023-07-01
3     B        456  2023-01-01 2023-03-01
4     B        789  2023-04-01 2023-06-01
5     B        123  2023-07-01 2023-08-01

Python相关问答推荐

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

滚动和,句号来自Pandas列

如何标记Spacy中不包含特定符号的单词?

Python中绕y轴曲线的旋转

如何获取numpy数组的特定索引值?

名为__main__. py的Python模块在导入时不运行'

合并帧,但不按合并键排序

使用Python和文件进行模糊输出

使用Openpyxl从Excel中的折线图更改图表样式

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

使用SeleniumBase保存和加载Cookie时出现问题

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

如何在PythonPandas 中对同一个浮动列进行逐行划分?

提取最内层嵌套链接

Django在一个不是ForeignKey的字段上加入'

Scipy差分进化:如何传递矩阵作为参数进行优化?

如何在python tkinter中绑定键盘上的另一个回车?

如何将列表从a迭代到z-以抓取数据并将其转换为DataFrame?

使用美汤对维基百科表格进行网络刮擦未返回任何内容

在不降低分辨率的情况下绘制一组数据点的最外轮廓