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