根据日期选择行,并更改其他列python pandas中的值

时间:2017-09-27 11:46:16

标签: python pandas numpy

在我的数据框(~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中的解决方案?

1 个答案:

答案 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