首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在熊猫中每隔n个连续的日期分配一个数字

在熊猫中每隔n个连续的日期分配一个数字
EN

Stack Overflow用户
提问于 2020-02-11 13:30:53
回答 2查看 94关注 0票数 0

我有一个如下的数据框架:

代码语言:javascript
复制
df = pd.DataFrame( {'date': ['2019-12-22', '2019-12-22','2019-12-15','2019-12-15', 
                             '2019-12-08', '2019-12-08','2019-12-01', '2019-12-01',
                            '2019-11-24', '2019-11-24','2019-11-17', '2019-11-17',
                             '2019-11-10', '2019-11-10'],
                    'name':  ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B']})

我想要做的是从最近的日期开始,为每两个连续的日期分配一个标记(数字)。需要如下结果:

代码语言:javascript
复制
    date    name    tag
0   2019-12-22  A   1
1   2019-12-22  B   1
2   2019-12-15  A   1
3   2019-12-15  B   1
4   2019-12-08  A   2
5   2019-12-08  B   2
6   2019-12-01  A   2
7   2019-12-01  B   2
8   2019-11-24  A   3
9   2019-11-24  B   3
10  2019-11-17  A   3
11  2019-11-17  B   3
12  2019-11-10  A   4
13  2019-11-10  B   4

实现这一目标的最佳方法是什么?需要一般的解决方案,可以适用于n个连续的日期。

EN

回答 2

Stack Overflow用户

发布于 2020-02-11 14:02:08

使用cumsum和楼层分割:

代码语言:javascript
复制
df["tag"] = (df["date"].eq(df["date"].shift(-1)).cumsum()+1)//2

print (df)

          date name  tag
0   2019-12-22    A    1
1   2019-12-22    B    1
2   2019-12-15    A    1
3   2019-12-15    B    1
4   2019-12-08    A    2
5   2019-12-08    B    2
6   2019-12-01    A    2
7   2019-12-01    B    2
8   2019-11-24    A    3
9   2019-11-24    B    3
10  2019-11-17    A    3
11  2019-11-17    B    3
12  2019-11-10    A    4
13  2019-11-10    B    4
票数 1
EN

Stack Overflow用户

发布于 2020-02-11 14:17:00

通过Series.diff和add Series.cumsum比较不相等的差异

代码语言:javascript
复制
df['tag'] = df['date'].diff().dt.days.ne(0).cumsum()
print (df)
         date name  tag
0  2019-12-22    A    1
1  2019-12-22    B    1
2  2019-12-15    A    2
3  2019-12-15    B    2
4  2019-12-08    A    3
5  2019-12-08    B    3
6  2019-12-01    A    4
7  2019-12-01    B    4
8  2019-11-24    A    5
9  2019-11-24    B    5
10 2019-11-17    A    6
11 2019-11-17    B    6
12 2019-11-10    A    7
13 2019-11-10    B    7

如果连续的组没有重复,这意味着在样本数据中,2019-12-082019-12-22替换为使用整数除法的factorize

代码语言:javascript
复制
df['tag'] = pd.factorize(df['date'])[0] + 2 // 2
print (df)

          date name  tag
0   2019-12-22    A    1
1   2019-12-22    B    1
2   2019-12-15    A    2
3   2019-12-15    B    2
4   2019-12-08    A    3
5   2019-12-08    B    3
6   2019-12-01    A    4
7   2019-12-01    B    4
8   2019-11-24    A    5
9   2019-11-24    B    5
10  2019-11-17    A    6
11  2019-11-17    B    6
12  2019-11-10    A    7
13  2019-11-10    B    7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60162544

复制
相关文章

相似问题

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