如何标准化熊猫的日期

时间:2019-10-18 13:46:20

标签: python pandas numpy

我有一个日期类型为2015年1月1日至2019年1月1日的pandas列,我想创建一个新列以将我的值标准化为个位数

我的熊猫专栏如下

A

2015-01-01
2015-02-01
2015-03-01
...
...
2019-12-01

我想要一个新的列,如下所示:

A                   B

2015-01-01          0
2015-02-01          1
2015-03-01          2
2015-05-01.         4
...
2019-11-01.         46
2019-12-01          47

3 个答案:

答案 0 :(得分:1)

对所有值使用Series.asfreqDatetimeIndex,然后按DataFrame.assign创建范围列,最后使用Series.map

s = df.set_index('A').asfreq('MS').assign(new=lambda x: np.arange(len(x)))['new']
df['B'] = df['A'].map(s) 
print (df)
           A   B
0 2015-01-01   0
1 2015-02-01   1
2 2015-03-01   2
3 2019-12-01  59

详细信息

print (s)
A
2015-01-01     0
2015-02-01     1
2015-03-01     2
2015-04-01     3
2015-05-01     4
2015-06-01     5
2015-07-01     6
...
...
...
2019-06-01    53
2019-07-01    54
2019-08-01    55
2019-09-01    56
2019-10-01    57
2019-11-01    58
2019-12-01    59
Freq: MS, Name: new, dtype: int32

答案 1 :(得分:1)

我们可以使用resample

df1=df.copy()
df.index=df.A
s=df.resample('MS').count()
df1['B']=df1.A.map(pd.Series(np.arange(len(s)),index=s.index))
df1
           A   B
0 2015-01-01   0
1 2015-02-01   1
2 2015-03-01   2
3 2019-12-01  59

答案 2 :(得分:0)

确保A是日期时间列

df['A'] = pd.to_datetime(df['A'])

从每个后续日期中减去开始日期。

start = df['A'].sort_values('A').iloc[0, 0]
df'B'] = df['A'].apply(lambda x: x - start).dt.days