简体   繁体   English

Pandas 基于多索引值替换 DataFrame 值

[英]Pandas replace DataFrame values based on multiindex values

I have two dataframes, where the first dataframe indexes/columns relate to the second dataframe indexes/columns.我有两个数据帧,其中第一个数据帧索引/列与第二个数据帧索引/列相关。 In df1 , the columns are the months of df2 , and the rows are the low layer of the indexes.df1 中,列是df2的月份,行是索引的低层。 I want to distribute df1 in df2 based on that relation.我想根据这种关系在df2 中分发df1 Here is a simplified example:这是一个简化的示例:

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)

在此处输入图片说明

A bit of work but no major obstacle.有点工作,但没有大的障碍。

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')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM