Pandas заменить значения DataFrame на основе многоиндексных значений - PullRequest
0 голосов
/ 20 марта 2020

У меня есть два фрейма данных, где индексы / столбцы первого фрейма относятся ко вторым индексам / столбцам фрейма данных. В df1 столбцами являются месяцы df2 , а строками - нижний уровень индексов. Я хочу распределить df1 в df2 на основе этого отношения. Вот упрощенный пример:

df1 = pd.DataFrame([[1, 2], [3, 4]], index= [1,2], columns=[1, 6])

index_list = [[1, 1, 2, 2],[1,2,1,2]]
header_list = [np.datetime64('2020-01-01'), np.datetime64('2020-06-01'),np.datetime64('2021-01-01'),np.datetime64('2021-06-01')]
df2 = pd.DataFrame(index=index_list, columns=header_list)

enter image description here

1 Ответ

0 голосов
/ 21 марта 2020

Немного работы, но никаких серьезных препятствий.

df1.index.name, df1.columns.name = 'key', 'month'
df2.index.names, df2.columns.name = ['a', 'key'], 'date'
x = df1.stack().reset_index().rename(columns={0: 'value'})
y = df2.fillna(0).stack().reset_index(level=-1).drop(0, axis=1)
y['month'] = y['date'].apply(lambda z: z.month)
y = y.reset_index().merge(x, on=['key', 'month']).drop('month', axis=1)
y = y.set_index(['a', 'key', 'date']).unstack('date')
...