在我的数据框(~200k行)中,我在列"日期"中转换值到周数,基于ISO标准周:
import pandas as pd
df["Week Number"] = df["Date"].dt.week
我的df看起来像这样:
Date | Column1 | Week Number
------+---------+--------
1/1/16 | A | 1
2/1/16 | B | 1
3/1/16 | C | 1
8/1/16 | A | 2
9/1/16 | B | 2
10/1/16 | C | 2
15/1/17 | A | 2
16/1/17 | B | 2
17/1/17 | C | 2
但是我希望在行中添加+52"周数",如果这一行是2017年的第34列;"日期":
Date | Column1 | Week Number
------+---------+--------
1/1/16 | A | 1
2/1/16 | B | 1
3/1/16 | C | 1
8/1/16 | A | 2
9/1/16 | B | 2
10/1/16 | C | 2
15/1/17 | A | 54
16/1/17 | B | 54
17/1/17 | C | 54
如何在python3中使用pandas / numpy或lib中的解决方案?
答案 0 :(得分:2)
使用
In [4210]: df.loc[df['Date'].dt.year >= 2017, 'Week Number'] += 52
In [4211]: df
Out[4211]:
Date Column1 Week Number
0 2016-01-01 A 1
1 2016-02-01 B 1
2 2016-03-01 C 1
3 2016-08-01 A 2
4 2016-09-01 B 2
5 2016-10-01 C 2
6 2017-01-15 A 54
7 2017-01-16 B 54
8 2017-01-17 C 54
或者,使用np.where
In [4222]: np.where(df['Date'].dt.year.ge(2017),
df['Week Number'].add(52),
df['Week Number'])
...:
Out[4222]: array([ 1, 1, 1, 2, 2, 2, 54, 54, 54], dtype=int64)
详细
In [4212]: df
Out[4212]:
Date Column1 Week Number
0 2016-01-01 A 1
1 2016-02-01 B 1
2 2016-03-01 C 1
3 2016-08-01 A 2
4 2016-09-01 B 2
5 2016-10-01 C 2
6 2017-01-15 A 54
7 2017-01-16 B 54
8 2017-01-17 C 54
In [4213]: df.dtypes
Out[4213]:
Date datetime64[ns]
Column1 object
Week Number int64
dtype: object