如何按列分组?

时间:2019-04-22 17:31:42

标签: group-by

我很难弄清楚如何按列对行进行分组。我的目标是计算列值分别为橙色和蓝色的“包装代码”的数量。

我正在处理数千行数据。这是数据的子集:

Country   Package Code   Color    Type
US        100            Orange    a
US        100            Orange    b
US        100            Orange    c
Mexico    200            Green     d
US        300            Blue      e
Canada    400            Red       f
Germany   500            Red       g
Germany   600            Blue      h

所需的输出:

Country   Packages
US         2
Mexico     0
Canada     0
Germany    1

1 个答案:

答案 0 :(得分:3)

使用isin + nunique + reindex

(df.loc[df.Color.isin(['Orange', 'Blue'])].groupby('Country')['Package Code']
    .nunique().reindex(df.Country.unique(), fill_value=0)).to_frame('Total').reset_index()

   Country  Total
0       US      2
1   Mexico      0
2   Canada      0
3  Germany      1

以下是为了更好的可读性而对上面的命令进行了一些分解:

# Select rows where the color is Orange or Blue
u = df.loc[df.Color.isin(['Orange', 'Blue'])]

# Find the unique values for Package Code, grouped by Country
w = u.groupby('Country')['Package Code'].nunique()

# Add in missing countries with a value of 0
w.reindex(df.Country.unique(), fill_value=0).to_frame('Total').reset_index()