首页 > 解决方案 > 在 groupby 之后的列中创建值

问题描述

我有一个数据框,它是在按“小时”和“站点”列分组初始数据框后获得的。因此,当前数据框具有按“小时”和“站点”分组的“价值”详细信息。我想要的是用零填充没有“价值”的小时。“小时”范围是 0-23。我怎样才能做到这一点?

左边是输入,右边是预期输出

在此处输入图像描述

标签: pythondataframegroup-by

解决方案


你可以试试这个:

import numpy as np
import pandas as pd

raw_df = pd.DataFrame(
    {
        "Hour": [1, 2, 4, 12, 0, 2, 7, 13],
        "Site": ["x", "x", "x", "x", "y", "y", "y", "y"],
        "Value": [1, 1, 1, 1, 1, 1, 1, 1],
    }
)
full_hour = pd.DataFrame(
    {
        "Hour": np.concatenate(
            [range(24) for site_name in raw_df["Site"].unique()]
        ),
        "Site": np.concatenate(
            [[site_name] * 24 for site_name in raw_df["Site"].unique()]
        ),
    }
)
result = full_hour.merge(raw_df, on=["Hour", "Site"], how="left").fillna(0)

然后你就可以得到你想要的。但我建议您在问题中复制测试数据而不是图像。您知道,我们没有责任创建您的数据。您应该更多地考虑如何让别人轻松地回答您的问题。


推荐阅读