Как объединить строки в одном DataFrame - PullRequest
1 голос
/ 26 апреля 2019

Я обрабатываю входящие данные пользователя.Я получаю DataFrame h, который должен содержать все float, но содержит несколько строк:

>>> h = pd.DataFrame(np.random.rand(3, 2), columns=['a', 'b'])
>>> h.loc[0, 'a'] = 'bad'
>>> h.loc[1, 'b'] = 'robot'
>>> h
           a           b
0        bad    0.747314
1   0.921919       robot
2   0.754256    0.664455

Я обрабатываю и устанавливаю строки на np.nan (я понимаю, np.nan является float, но это для иллюстрации):

>>> hh = h.copy()
>>> hh.loc[0, 'a'] = np.nan
>>> hh.loc[1, 'b'] = np.nan
>>> hh
           a           b
0        NaN    0.747314
1   0.921919         NaN
2   0.754256    0.664455

У меня есть DataFrame с ожидаемыми значениями (или dict):

>>> g = pd.DataFrame({'a': ['foo'], 'b': ['bar']}, index=h.index)
>>> g
      a       b
0   foo     bar
1   foo     bar
2   foo     bar

, который я использую для заполнения гденеверные данные:

>>> hh.fillna(g)
          a           b
0        foo    0.747314
1   0.921919         bar
2   0.754256    0.664455

Мне нужно также включить данные ожидаемые .Таким образом, результат должен быть:

>>> magic(hh, g)
                   a                     b
0   rec=bad; exp=foo              0.747314
1           0.921919    rec=robot; exp=bar
2           0.754256              0.664455

Как я могу создать такой результат?

1 Ответ

5 голосов
/ 26 апреля 2019

Вы можете преобразовать ненужные значения в NaN s с помощью DataFrame.where, объединить вместе с string s и в последний раз заменить исходные значения:

m = hh.isna()
df = ('rec=' + h.where(m) + '; exp=' + g.where(m)).fillna(h)
print (df)
                  a                   b
0  rec=bad; exp=foo            0.440508
1          0.525949  rec=robot; exp=bar
2          0.337586            0.414336
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...