Reputation: 65
In my dataframe (~200k rows), i convert value in column "Date" to week number, based on ISO-standard week:
import pandas as pd
df["Week Number"] = df["Date"].dt.week
And my df look like this:
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
But i want add +52 in row "Week Number", if this row is from 2017 in column "Date":
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
How make solution in pandas/numpy or something lib in python3?
Upvotes: 1
Views: 1881
Reputation: 76917
Use
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
Or, use 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)
Details
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
Upvotes: 2