добавить столбец в pandas фрейм данных на основе имени строки, если строка не существует, добавьте ее в - PullRequest
1 голос
/ 14 июля 2020

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

df1 = pd.DataFrame([['a', '10'], ['b', '20']],
               columns=['letter', 'Jan'])
df2 = pd.DataFrame([['a', '1'], ['b', '2'], ['c', '2']],
               columns=['letter', 'feb'])
df3 = pd.DataFrame([['a', '10'], ['b', '20'], ['c', '20'], ['d', '20']],
               columns=['letter', 'march'])

как мне добавить df2, затем df3 в df1, чтобы это выглядело следующим образом. это и письмо продолжает добавляться, а это не то, что я хочу

  letter  Jan  feb march
0      a   10  NaN   NaN
1      b   20  NaN   NaN
0      a  NaN    1   NaN
1      b  NaN    2   NaN
2      c  NaN    2   NaN
0      a  NaN  NaN    10
1      b  NaN  NaN    20
2      c  NaN  NaN    20
3      d  NaN  NaN    20
 

Есть идеи, как я могу решить эту проблему? Спасибо

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вот решение вашей проблемы.

df_outer = pd.merge(df1, df2, on='letter', how='outer')
df_outer = pd.merge(df_outer, df3, on='letter', how='outer')
df_outer = df_outer.fillna('')
df_outer
1 голос
/ 14 июля 2020

Используйте DataFrame.merge до внешнего , объедините фреймы данных df1, df2 и df3 на letter, затем используйте DataFrame.fillna для заполнения значений NaN:

df = (
    df1.merge(df2, on='letter', how='outer')
    .merge(df3, on='letter', how='outer').fillna('')
)

ИЛИ, при большом количестве фреймов данных, требующих объединения, мы можем использовать более краткое решение, используя reduce + pd.merge и передайте список фреймов данных, которые требуют объединения, в функцию reduce:

from functools import reduce

df = reduce(lambda x, y:
            pd.merge(x, y, on='letter', how='outer'), [df1, df2, df3]).fillna('')

Результат:

# print(df)

  letter Jan feb march
0      a  10   1    10
1      b  20   2    20
2      c       2    20
3      d            20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...