【问题标题】:Python Pandas Group by Count Pivot of multiple colunmsPython Pandas Group by Count Pivot of multiple columns
【发布时间】:2019-12-22 01:09:50
【问题描述】:

给定标题为 TimStamp、性别和种族, 我想按时间戳计算性别和种族组的计数。给定性别 = M/F 种族 = A/B/C/D/E。

Race = E 可能不存在于数据集中,但预计数据与 Race E。 因此,占位符的重要性为零。

数据和输出示例如下所示。

时间戳 12:30, 12:30, 12:30, 12:30, 12:31, 12:31, 12:32,

性别 = 米, F, F, F, 米, F, M

种族 = 一种, 一种, 乙, 乙, C, 一种, D

【问题讨论】:

    标签: python pandas pivot-table pandas-groupby


    【解决方案1】:

    您需要为此做两个数据透视表:

    要实现一个包含Race中所有指定类别的表格,您需要将Race转换为分类变量:

    df["Race"] = pd.Categorical(df.Race, categories=["A", "B", "C", "D", "E"])
    

    性别:

     df_g =  df.groupby(["Time_stamp", "Gender"], observed=False).count().fillna(0).unstack() 
    

    对于种族:

    df_r = (df.groupby(["Time_stamp", "Race"], observed=False)
            .count().fillna(0).reset_index()
            .astype({"Race": str}).pivot_table(index="Time_stamp", columns="Race"))
    

    然后你就可以加入他们了:

    df_report = df_r.join(df_g)  
    df_report.columns = df_report.columns.droplevel()
    

    【讨论】:

    • 我喜欢你的回答,正如我们看到的描述,我们需要一个 Col E,这在我们得到的 DataSet 中没有给出。我很抱歉没有强调这一点。任何方式,非常感谢您的回答,希望您的回答可以按照粗体注释进行完善。 Race = E 可能不存在于数据集中,但预期具有 Race E 的数据。因此,Place Holder 很重要,值为 0。所以我们需要将 Race = A/B/C/D/E 放在最前面。
    • 酷!没问题:D。我修好了它。现在您应该看到所有列。如果我设法帮助你,请考虑选择我的答案作为接受的答案:D
    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 2018-09-17
    • 2017-07-17
    • 2016-08-08
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多