Seva Arve
Seva Arve

Reputation: 65

Select row based on date and change value in other column python pandas

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

Answers (1)

Zero
Zero

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

Related Questions