Pandas 如何根据时间序列和数据帧中的重复值分配一个新列,该列的值从1到N开始?

Pandas 如何根据时间序列和数据帧中的重复值分配一个新列,该列的值从1到N开始?,pandas,Pandas,例如: id date seq a 2019/11/01 1 a 2019/12/01 2 b 2019/10/01 1 c 2019/12/01 2 c 2019/11/01 1 我想根据列date和id分配列seq base,后者是重复的。详情如下: 对于在列id(如b)中不重复的值,它将在列seq中得到1。 对于列id(如a和c)中重复的值,它将从NN开始1是基于时间序列列日期的重复频率。 用于将值转换为日

例如:

id      date      seq 
a    2019/11/01    1
a    2019/12/01    2
b    2019/10/01    1
c    2019/12/01    2
c    2019/11/01    1
我想根据列date和id分配列seq base,后者是重复的。详情如下:

对于在列id(如b)中不重复的值,它将在列seq中得到1。 对于列id(如a和c)中重复的值,它将从NN开始1是基于时间序列列日期的重复频率。 用于将值转换为日期时间并在以下时间之前排序:

df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['id','date'])

df['seq'] = df.groupby('id').cumcount() + 1
print (df)
  id       date  seq
0  a 2019-11-01    1
1  a 2019-12-01    2
2  b 2019-10-01    1
4  c 2019-11-01    1
3  c 2019-12-01    2
如果需要与原始添加相同的订单:

用于将值转换为日期时间并在以下时间之前排序:

df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(['id','date'])

df['seq'] = df.groupby('id').cumcount() + 1
print (df)
  id       date  seq
0  a 2019-11-01    1
1  a 2019-12-01    2
2  b 2019-10-01    1
4  c 2019-11-01    1
3  c 2019-12-01    2
如果需要与原始添加相同的订单:

您也可以使用该方法

您也可以使用该方法

import pandas as pd
    df = pd.DataFrame({'id':[1,1,2,3,3],
                       'date':['2019/11/01',
    '2019/12/01',
    '2019/10/01',
    '2019/12/01',
    '2019/11/01']})

df['date'] = pd.to_datetime(df['date'])  # first convert to datetime
df['seq'] = df.groupby('id')['date'].rank(method='dense').astype(int)


   id       date  seq
0   1 2019-11-01    1
1   1 2019-12-01    2
2   2 2019-10-01    1
3   3 2019-12-01    2
4   3 2019-11-01    1