我有一个数据框,其中包含主题ID的列和包含日期信息的列。我想创建第三个变量,以指示每个主题的日期的时间顺序。一个例子:
import pandas as pd
df = pd.DataFrame({'ID':[1,1,2,2,3,3,3],
'Date':[20191219,
20191220,
20191220,
20191219,
20191219,
20191220,
20191221]})
为您提供:
ID Date
0 1 20191219
1 1 20191220
2 2 20191220
3 2 20191219
4 3 20191219
5 3 20191220
6 3 20191221
添加第三个变量 t ,以便获得:
ID Date t
0 1 20191219 0
1 1 20191220 1
2 2 20191220 1
3 2 20191219 0
4 3 20191219 0
5 3 20191220 1
6 3 20191221 2
答案 0 :(得分:1)
澄清之后,我认为您需要groupby.cumcount()
方法,但是在此之前,您需要按ID
和Date
对值进行排序,并删除所有重复项:
import pandas as pd
df = pd.DataFrame({'ID':[1,1,2,2,3,3,3,4],
'Foo':['a','b','c','d','e','f','g','h'],
'Date':[20191219,
20191219,
20191220,
20191219,
20191219,
20191220,
20191221,
20191222]})
df['t'] = df.sort_values(['ID', 'Date']).drop_duplicates(['ID', 'Date']).groupby('ID').cumcount()
df['t'] = df['t'].fillna(method='ffill').astype(int)
print(df)
打印:
ID Foo Date t
0 1 a 20191219 0
1 1 b 20191219 0
2 2 c 20191220 1
3 2 d 20191219 0
4 3 e 20191219 0
5 3 f 20191220 1
6 3 g 20191221 2
7 4 h 20191222 0