Объединение двух DataFrames, основанных на столбцах и значениях определенного столбца, с Pandas в Python 3.x - PullRequest
0 голосов
/ 08 ноября 2018

Здравствуйте, у меня есть проблема, по которой я не могу реализовать решение.У меня есть следующие два DataFrames:

>>> df1
A  B   date
1  1  01-2016
2  1  02-2017
1  2  03-2017
2  2  04-2020

>>> df2
A  B  01-2016  02-2017  03-2017  04.2020
1  1    0.10    0.22     0.55     0.77
2  1    0.20    0.12     0.99     0.125
1  2    0.13    0.15     0.15     0.245
2  2    0.33    0.1      0.888    0.64

Что я хочу, это следующий DataFrame:

>>> df3
A  B   date      value
1  1  01-2016    0.10
2  1  02-2017    0.12
1  2  03-2017    0.15
2  2  04-2020    0.64

Я уже пробовал следующее:

        summarize_dates = self.summarize_specific_column(data=df1, column='date')

        for date in summarize_dates:
            left_on = np.append(left_on, date)
            right_on = np.append(right_on, merge_columns.upper())
            result = pd.merge(left=df2, right=df1,
                              left_on=left_on, right_on=right_on,
                              how='right')
            print(result)

Это не работает.Можете ли вы помочь мне и предложить более удобную реализацию?Большое спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Использование lookup

df1['value']=df2.set_index(['A','B']).lookup(df1.set_index(['A','B']).index,df1.date)
df1
Out[228]: 
   A  B     date  value
0  1  1  01-2016   0.10
1  2  1  02-2017   0.12
2  1  2  03-2017   0.15
3  2  2  04-2020   0.64
0 голосов
/ 08 ноября 2018

Вы можете расплавить df2, а затем объединить, используя стандартное внутреннее объединение

.
df3 = df1.merge(df2.melt(id_vars = ['A', 'B'], var_name='date'))

    A   B   date    value
0   1   1   01-2016 0.10
1   2   1   02-2017 0.12
2   1   2   03-2017 0.15
3   2   2   04-2020 0.64
...