首页 > 解决方案 > 熊猫仅从另一列复制值到某个日期

问题描述

我有一列Date类型datetime64[ns],每个日期由一行组成。还有两列AB。假设日期从 2019 年 12 月 1 日开始,一直持续到 2020 年 2 月 29 日,我希望将所有值从列复制A到列,B直到某个日期 x。

例如,如果 x = 2020 年 2 月 15 日,我需要将 A 从 2019 年 12 月 1 日到 2020 年 2 月 14 日的值复制到 B 列。

任何帮助表示赞赏!

标签: pythonpandas

解决方案


我认为您需要Series.mask的复制数据不那么像x,因此掩码由以下人员创建Series.lt

np.random.seed(2020)

rng = pd.date_range('2019-12-01', '2020-02-29')
df = pd.DataFrame({'Date': rng, 
                   'A': np.random.randint(10, size=91),
                   'B': np.random.randint(10, size=91)})  
print (df.head(20))
         Date  A  B
0  2019-12-01  0  5
1  2019-12-02  8  2
2  2019-12-03  3  4
3  2019-12-04  6  3
4  2019-12-05  3  0
5  2019-12-06  3  9
6  2019-12-07  7  8
7  2019-12-08  8  2
8  2019-12-09  0  0
9  2019-12-10  0  6
10 2019-12-11  8  7
11 2019-12-12  9  1
12 2019-12-13  3  7
13 2019-12-14  7  2
14 2019-12-15  2  5
15 2019-12-16  3  9
16 2019-12-17  6  6
17 2019-12-18  5  7
18 2019-12-19  0  9
19 2019-12-20  4  3

x = '2019-12-10'

df['B'] = df['B'].mask(df["Date"].lt(x), df['A'])
print (df.head(20))
         Date  A  B
0  2019-12-01  0  0
1  2019-12-02  8  8
2  2019-12-03  3  3
3  2019-12-04  6  6
4  2019-12-05  3  3
5  2019-12-06  3  3
6  2019-12-07  7  7
7  2019-12-08  8  8
8  2019-12-09  0  0
9  2019-12-10  0  6
10 2019-12-11  8  7
11 2019-12-12  9  1
12 2019-12-13  3  7
13 2019-12-14  7  2
14 2019-12-15  2  5
15 2019-12-16  3  9
16 2019-12-17  6  6
17 2019-12-18  5  7
18 2019-12-19  0  9
19 2019-12-20  4  3

推荐阅读