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

У меня есть кадр данных (df1), который выглядит следующим образом:

+------------+--------+-------+
| Date       | Length | Width |
+------------+--------+-------+
| 2020-01-01 | 10     | 12    |
+------------+--------+-------+
| 2020-01-02 | 39     | 34    |
+------------+--------+-------+
| 2020-01-03 | 50     | 23    |
+------------+--------+-------+
| 2020-01-04 | 1      | 24    |
+------------+--------+-------+
| 2020-01-05 | 2      | 10    |
+------------+--------+-------+
| 2020-01-06 | 1      | 16    |
+------------+--------+-------+
| 2020-01-07 | 79     | 20    |
+------------+--------+-------+
| 2020-01-08 | 86     | 34    |
+------------+--------+-------+
| 2020-01-09 | 92     | 23    |
+------------+--------+-------+
| 2020-01-10 | 101    | 25    |
+------------+--------+-------+
| 2020-01-11 | 113    | 24    |
+------------+--------+-------+
| 2020-01-12 | 125    | 50    |
+------------+--------+-------+
| ...        | ...    |       |
+------------+--------+-------+

Значение для даты с «2020-01-04» по «2020-01-06» в столбце «Длина» не что я хочу.

Я нашел правильные значения для этих 3 дат и поместил их в отдельную небольшую таблицу, подобную этой (df2):


+------------+--------+
| Date       | Length |
+------------+--------+
| 2020-01-04 | 20     |
+------------+--------+
| 2020-01-05 | 30     |
+------------+--------+
| 2020-01-06 | 50     |
+------------+--------+

Какой самый эффективный способ для меня заменить 3 значения обратно на df1?

Это просто набор псевдоданных, который я создал для иллюстрации. Реальные данные, которые у меня есть, намного больше этого (и df1, и df2 намного больше), поэтому я не могу вручную заменить эти значения ячейка за ячейкой.

Я ожидаю, что конечные результаты будут выглядеть так:


+------------+--------+-------+
| Date       | Length | Width |
+------------+--------+-------+
| 2020-01-01 | 10     | 12    |
+------------+--------+-------+
| 2020-01-02 | 39     | 34    |
+------------+--------+-------+
| 2020-01-03 | 50     | 23    |
+------------+--------+-------+
| 2020-01-04 | 20     | 24    |
+------------+--------+-------+
| 2020-01-05 | 30     | 10    |
+------------+--------+-------+
| 2020-01-06 | 50     | 16    |
+------------+--------+-------+
| 2020-01-07 | 79     | 20    |
+------------+--------+-------+
| 2020-01-08 | 86     | 34    |
+------------+--------+-------+
| 2020-01-09 | 92     | 23    |
+------------+--------+-------+
| 2020-01-10 | 101    | 25    |
+------------+--------+-------+
| 2020-01-11 | 113    | 24    |
+------------+--------+-------+
| 2020-01-12 | 125    | 50    |
+------------+--------+-------+
| ...        | ...    |       |
+------------+--------+-------+

Большое спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Посмотрите на DataFrame.update () :

# note: update() requires the DataFrames to have indices

df1.set_index('Date', inplace=True)
df1.update(df2.set_index('Date'))
df1.reset_index(inplace=True)
1 голос
/ 23 апреля 2020

Если ваши индексы действительно выровнены, мы можем использовать combine_first

#df1 = df1.set_index('Date')
#df2 = df2.set_index('Date')
df3 = df2.combine_first(df1)

print(df3)

              Length    Width
Date                         
2020-01-01   10        12    
2020-01-02   39        34    
2020-01-03   50        23    
2020-01-04   20        24    
2020-01-05   30        10    
2020-01-06   50        16    
2020-01-07   79        20    
2020-01-08   86        34    
2020-01-09   92        23    
2020-01-10   101       25    
2020-01-11   113       24    
2020-01-12   125       50  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...