python - 如何连接两个具有不同 MultiIndex 值的数据帧并使一个数据帧重复?

标签 python python-3.x pandas

我有两个具有不同分辨率 MultiIndex 值的数据帧。第一个数据帧跟踪state , year ,和hour变量,而第二个数据帧仅跟踪 statehour变量。如何连接两个数据框,以便每年重复第二个数据框?这是一个小表示:

#!/usr/bin/env python
import pandas as pd
import numpy as np

YEARS = np.arange(2015, 2055, 5)
HOURS = np.arange(1, 8761, 1)

idx0 = pd.MultiIndex.from_product([['NY'], YEARS, HOURS], names=['state', 'year', 'hour'])
df0 = pd.DataFrame(
    np.random.rand(70080, 1),
    columns=['TOTALLOAD'],
    index=idx0
)
#                  TOTALLOAD
# state year hour
# NY    2015 1      0.283680
#            2      0.475532
#            3      0.309519
#            4      0.360841
#            5      0.835909
# ...                    ...
#       2050 8756   0.152357
#            8757   0.431416
#            8758   0.694271
#            8759   0.766727
#            8760   0.365636
# [70080 rows x 1 columns]

idx1 = pd.MultiIndex.from_product([['NY'], HOURS], names=['state', 'hour'])
df1 = pd.DataFrame(
    np.random.rand(8760, 2),
    columns=['WIND', 'SOLAR'],
    index=idx1
)
#                 WIND     SOLAR
# state hour
# NY    1     0.835902  0.488313
#       2     0.066278  0.137335
#       3     0.600126  0.526955
#       4     0.661116  0.464443
#       5     0.547492  0.840770
# ...              ...       ...
#       8756  0.786757  0.829725
#       8757  0.753301  0.985739
#       8758  0.856252  0.196507
#       8759  0.322048  0.650752
#       8760  0.798451  0.050394
# [8760 rows x 2 columns]


# Expected Dataframe
df2 = pd.DataFrame(
    np.random.rand(70080, 3),
    columns=['TOTALLOAD', 'WIND', 'SOLAR'],
    index=idx0
)
#                  TOTALLOAD      WIND     SOLAR
# state year hour
# NY    2015 1      0.108648  0.767488  0.391436
#            2      0.012284  0.616722  0.314657
#            3      0.954200  0.666713  0.112874
#            4      0.078314  0.170395  0.697167
#            5      0.893799  0.356095  0.706867
# ...                    ...       ...       ...
#       2050 8756   0.233540  0.183593  0.178483
#            8757   0.473917  0.662912  0.135068
#            8758   0.124253  0.784875  0.528687
#            8759   0.350463  0.107292  0.446881
#            8760   0.223953  0.689475  0.425816
#
# [70080 rows x 3 columns]

最佳答案

简单地使用:

df0.join(df1)

由于 MultiIndex 有两个公共(public)级别,因此将对这两个级别执行联接,并通过复制行将其广播到第三个级别。

示例:

>>> df0.join(df1).head()
                 TOTALLOAD      WIND     SOLAR
state hour year                               
NY    1    2015   0.164803  0.406091  0.822639
           2020   0.805777  0.406091  0.822639
           2025   0.480883  0.406091  0.822639
           2030   0.284095  0.406091  0.822639
           2035   0.811343  0.406091  0.822639

关于python - 如何连接两个具有不同 MultiIndex 值的数据帧并使一个数据帧重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69949867/

相关文章:

python - 为什么我的轮廓没有关闭(Python,OpenCV)?

python - 将工作日添加到日期时间列

python - 子进程抓取 airodump-ng 的标准输出

python - 在 python 的 azure 函数中安装 google api 时出错

python - 加快循环过滤字符串的速度

python - 将列转换为 Pandas 数据框中的多行

python - 为什么 numpy 形状是空的?

python - 在 Python 中与另一个命令行程序交互

python - 选择特定用户

arrays - arr.sort(key=lambda x : (x[0], -x[1])) 是什么意思?