【问题标题】:Pandas replace DataFrame values based on multiindex valuesPandas 根据多索引值替换 DataFrame 值
【发布时间】:2020-03-23 04:24:19
【问题描述】:

我有两个数据帧,其中第一个数据帧索引/列与第二个数据帧索引/列相关。在df1中,列是df2的月份,行是索引的低层。我想根据这种关系在 df2 中分发 df1。这是一个简化的例子:

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)

【问题讨论】:

    标签: python pandas replace conditional-statements multi-index


    【解决方案1】:

    有点工作,但没有大的障碍。

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

    【讨论】:

    • 提供的示例中存在错误。最后日期的年份应该是2021
    • 你是对的,修复它。您的代码有效,谢谢!我想知道是否有更简单的方法可以做到这一点:)
    猜你喜欢
    • 2016-10-10
    • 2019-03-22
    • 2016-10-06
    • 2018-09-26
    • 2019-04-06
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多