поиск и замена символов в одном кадре данных на значения из другого кадра данных в тысячах столбцов - PullRequest
0 голосов
/ 27 января 2019

У меня есть данные frame1 с биржевыми символами в качестве значений.Даты в столбце

 {     1/10/2001 1/11/2001 1/12/2001 ...............etc till 1/22/2019
   0    AAPL      MS        AAPL
   1    MRK       AAPL      AMZN
   2    AMZN      MSFT      MRK
   3    MSFT      AAPL      MSFT
                                                       }

Мой второй фрейм данных содержит символ, поскольку индекс и даты в столбце точно соответствуют первому.Значения являются ежедневными доходами.

{       1/10/2001 1/11/2001 1/12/2001 .............. etc till 1/22/2019
  AAPL    0.05     0.03      0.03
  MSFT    0.04     0.01      0.01
  MRK    -0.04    -0.07      0.05
  MS      0.02     0.04      0.08
  GS      0.01     0.02      0.10
  AMZN    0.04     0.02      0.06
                                             }

По сути, цель состоит в том, чтобы заменить символ в кадре данных на возвращаемые значения в кадре данных 2

 {     1/10/2001 1/11/2001 1/12/2001 ...............etc till 1/22/2019
   0    0.05      0.04      0.03
   1   -0.04      0.03      0.06
   2    0.04      0.01      0.05
   3    0.04      0.03      0.01
                                              }

Я пробовал iloc, loc, которые слишком статичны.Я пробовал map, merge, но мне не повезло с точки зрения того, чтобы сделать это динамичным и масштабируемым.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вам нужно df.replace() для этого варианта использования, он автоматически отображает индекс и значения при замене, поэтому вы должны получить желаемый результат:

df_new=df1.replace(df2)
print(df_new)

   2001-10-01  2001-11-01  2001-12-01
0        0.05        0.04        0.03
1       -0.04        0.03        0.06
2        0.04        0.01        0.05
3        0.04        0.03        0.01

Это заменит все значения df1 на df2, соответствующие индексу df2.

Пример ниже:

print(df1)

  2001-10-01 2001-11-01 2001-12-01
0       AAPL         MS       AAPL
1        MRK       AAPL       AMZN
2       AMZN       MSFT        MRK
3       MSFT       AAPL       MSFT

print(df2)

      2001-10-01  2001-11-01  2001-12-01
AAPL        0.05        0.03        0.03
MSFT        0.04        0.01        0.01
MRK        -0.04       -0.07        0.05
MS          0.02        0.04        0.08
GS          0.01        0.02        0.10
AMZN        0.04        0.02        0.06

df_new=df1.replace(df2)
print(df_new)

   2001-10-01  2001-11-01  2001-12-01
0        0.05        0.04        0.03
1       -0.04        0.03        0.06
2        0.04        0.01        0.05
3        0.04        0.03        0.01
0 голосов
/ 27 января 2019

Вам, вероятно, понадобится df.update(), который модифицируется на месте с использованием non-NA значений из другого DataFrame.

Пример:

>>> df
   A    B
0  1  400
1  2  500
2  3  600

>>> df2
   B  C
0  4  7
1  5  8
2  6  9

Использование df.update():

>>> df.update(df2)

Результат:

>>> df
   A  B
0  1  4
1  2  5
2  3  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...