首页 > 解决方案 > 如何获取列值的频率计数,按另一列中的分类值排序

问题描述

我有一个熊猫数据框,其中包括两列,船只名称和延迟指示器。船只名称是船只的字符串名称,延迟指示符是 0 或 1(布尔值)。

我的数据框:

df = pd.DataFrame({
    "Vessel.Name": ["Spirit of British Columbia", "Queen of New Westminster", "Spirit of Vancouver Island", "Coastal Celebration", "Spirit of British Columbia"],
    "Delay.Indicator":[0, 0, 0, 1, 0]
})

它的外观:

Vessel.Name                 Delay.Indicator
Spirit of British Columbia  0
Queen of New Westminster    0
Spirit of Vancouver Island  0
Coastal Celebration         1
Spirit of British Columbia  0 

我的目标是获得一个 DataFrame,其中包含每个不同的船名,以及两个新列,指示其计数,以及延迟指示器中“1”的总数,用于每个不同的船名。不确定是否有 Pandas 方法,或者我是否应该遍历 python 列表?

标签: pythonpandasdataframe

解决方案


应用聚合函数的简单 groupby 应该可以解决问题:

df.groupby("Vessel.Name")["Delay.Indicator"].agg(['count', sum])

输出:

                            count   sum
Vessel.Name     
Coastal Celebration         1       1
Queen of New Westminster    1       0
Spirit of British Columbia  2       0
Spirit of Vancouver Island  1       0

推荐阅读