Заменить значения в pandas кадре данных из другого - PullRequest
2 голосов
/ 18 апреля 2020

У меня есть pandas фрейм данных (df1), и мне нужно заменить некоторые значения df1 на другой фрейм данных (df2). df1 содержит временные ряды с 1998-01-01 по 2002-12-31, а df1 содержит временные ряды с 1998-03-01 по 1998-07-31.

Я хочу заменить значения df1 на значения df2 для периода времени df2 (т.е. с 1998-03-01 по 1998-07-31)

df1=

date          kc
1998-01-01    0
1998-01-02    0
1998-01-03    0
1998-01-04    0
1998-01-05    0
.
.
.
2002-12-30    0
2002-12-31    0

and df2=

date          kc
1998-03-01    0.3
1998-03-02    0.35
1998-03-03    0.4
1998-03-04    0.45
1998-03-05    0.4
.
.
.
1998-07-30    0.6
1998-07-31    0.7

Где столбец даты установить индекс для обоих кадров данных. Я попробовал следующее:

df1.loc["1998-03-01":"1998-07-31","kc"]=df2

Но это ничего не меняет, df1 остается таким же.

1 Ответ

2 голосов
/ 18 апреля 2020

Образцы:

print (df1)
            kc
Date          
1998-01-01   0
1998-02-01   0
1998-03-01   0
1998-03-02   0
1998-03-03   0
2002-12-30   0
1998-12-31   0

print (df2)
              kc
date            
1998-02-01  0.30
1998-03-01  0.35
1998-03-02  0.40
1998-03-03  0.45
1998-03-04  0.40
2002-07-30  0.60
1998-07-31  0.70

Вы можете использовать Series.combine_first

df1["kc"] = df2['kc'].combine_first(df1['kc'])

print (df1)
              kc
Date            
1998-01-01  0.00
1998-02-01  0.30
1998-03-01  0.35
1998-03-02  0.40
1998-03-03  0.45
2002-12-30  0.00
1998-12-31  0.00

или Index.isin для новых значений по маске :

df1.loc[df1.index.isin(df2.index), "kc"]=df2['kc']

print (df1)
              kc
Date            
1998-01-01  0.00
1998-02-01  0.30
1998-03-01  0.35
1998-03-02  0.40
1998-03-03  0.45
2002-12-30  0.00
1998-12-31  0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...