我有一个数据框,包含数据列、客户列和大小如下:

Customer Date Size
Cust1 20/10/2021 4
Cust1 21/10/2021 5
Cust1 22/10/2021 6
Cust1 23/10/2021 6
Cust2 20/10/2021 4
Cust2 21/10/2021 5
Cust2 22/10/2021 6
Cust2 23/10/2021 6
Cust3 20/10/2021 4
Cust3 21/10/2021 5
Cust3 22/10/2021 6
Cust3 23/10/2021 6

我需要从客户那里提取每个第n个日期,然后删除其余日期.在本例中,每2秒:

|Customer|Date|Size|
|--------|----|----|
|Cust1   |20/10/2021|4|
|Cust1   |22/10/2021|6|
|Cust2   |20/10/2021|4|
|Cust2   |22/10/2021|6|
|Cust3   |20/10/2021|4|
|Cust3   |22/10/2021|6|

很抱歉格式不好,但表格格式不适用于第二个表格.

实际上是每10天一次,从最近一次开始.

df_10 = df.iloc[::10, :]

AttributeError: 'DataFrameGroupBy' object has no attribute 'iloc'

老实说,我根本不坚持使用groupby,但到目前为止还没有找到有效的解决方案.

非常感谢.

推荐答案

你可以使用:

df.loc[df.groupby('Customer').cumcount().mod(2).eq(0)]

输出:

   Customer        Date  Size
0     Cust1  20/10/2021     4
2     Cust1  22/10/2021     6
4     Cust2  20/10/2021     4
6     Cust2  22/10/2021     6
8     Cust3  20/10/2021     4
10    Cust3  22/10/2021     6

说明:

df.groupby('Customer').cumcount() for each 组创建一个计数([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]),然后mod(2)取模得到[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]eq(0)使能 Select 0值.

如果你想每N行取一次,从K的1开始(第一个是0):.mod(N).eq(K)

Python相关问答推荐

递归函数修饰器

如何将验证器应用于PYDANC2中的EACHY_ITEM?

对当前的鼹鼠进行编码,并且我的按键获得了注册

如何通过函数的强式路径动态导入函数?

正则表达式反向查找

Pandas 数据框自定义排序功能

IpyWidget Select 框未打开

如何更改网络中某条边的位置(&Q;)?

as_index=False groupBy不支持count

日志(log)轴上的自定义刻度出现意外的次要刻度标记行为

有没有更python的方法来复制python中列表的第n个元素?例如,使用列表理解

使用Numpy进行重写For循环矢量化

每像素级图像处理的毕达式优化

Pandas 中的每行布尔运算

在Python中用两个图像制作一个图像

如何从两对点得到一个二维变换矩阵?

将MultiIndex列的级别转换为具有值的列(取消堆叠列)

如何编写拆分和 Select 每个PANAS列中的第一个元素的Python函数

如果没有强制转换Numy数组,则通过ctype将Numy数组传递给C函数会产生错误的结果

匹配具有给定异常的给定格式的所有字符串的正则表达式