Как сопоставить соответствующие данные из двух датафреймов? - PullRequest
0 голосов
/ 15 октября 2019

У меня есть два кадра данных. dataframe_a:

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  10        | america       |        12 | 2000-1-1
  11        | america       |        13 | 2000-1-2
  21        | china         |        14 | 2000-1-3

и dataframe_b:

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  1         | china         |        14 | 2000-1-3
  2         | america       |        13 | 2000-1-2
  3         | america       |        12 | 2000-1-1

И мне нужно объединить эти кадры данных на соответствующих location_zone, test_hour и analysis_date, идобавьте столбцы data. Окончательный результат должен быть:

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  13        | america       |        12 | 2000-1-1
  13        | america       |        13 | 2000-1-2
  22        | china         |        14 | 2000-1-3

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Вы можете сделать concat + groupby :

df = pd.concat([dataframe_a, dataframe_b]).groupby(['location_zone','test_hour','analysis_date'], as_index=False)['data'].sum()
print(df)

Выход

  location_zone  test_hour analysis_date  data
0       america         12      2000-1-1    13
1       america         13      2000-1-2    13
2         china         14      2000-1-3    22
0 голосов
/ 15 октября 2019

Поскольку оба df имеют одинаковые имена столбцов, вы можете переименовать один data столбец в другое имя и позволить merge обрабатывать остальные. Далее назовите eval и нарезайте на оригинальные столбцы

df_final = (df_a.merge(df_b.rename(columns={'data': 'data_b'}))
                .eval('data=data + data_b')[df_a.columns])

Out[20]:
   data location_zone  test_hour analysis_date
0    13       america         12      2000-1-1
1    13       america         13      2000-1-2
2    22         china         14      2000-1-3
0 голосов
/ 15 октября 2019

Просто поместите столбцы с общими значениями в качестве индекса, используя DataFrame.set_index. Затем добавьте:

comun=['location_zone','test_hour','analysis_date']
new_df=(dfb.set_index(comun)['data']+dfa.set_index(comun)['data']).reset_index()
print(new_df)

  location_zone  test_hour analysis_date  data
0       america         12      2000-1-1    13
1       america         13      2000-1-2    13
2         china         14      2000-1-3    22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...