在数据框中为日期列创建主题时间点

时间:2019-12-19 17:26:19

标签: python pandas

我有一个数据框,其中包含主题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

1 个答案:

答案 0 :(得分:1)

澄清之后,我认为您需要groupby.cumcount()方法,但是在此之前,您需要按IDDate对值进行排序,并删除所有重复项:

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