Python Pandas Group by Count Pivot of multiple columns

Posted

技术标签:

【中文标题】Python Pandas Group by Count Pivot of multiple columns【英文标题】:Python Pandas Group by Count Pivot of multiple colunms 【发布时间】: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

【问题讨论】:

【参考方案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

以上是关于Python Pandas Group by Count Pivot of multiple columns的主要内容,如果未能解决你的问题,请参考以下文章

Python,在 Pandas DataFrame 的“group concat”中使用“order by”

sql select group by a count(1) > 1 在python pandas中等效?

Python Pandas Group by Count Pivot of multiple columns

group by用法

Pandas 数据框中的 MultiIndex Group By

Pandas Group By 和 Get Dummies