pandas.groupby中的迭代

时间:2019-04-20 11:41:47

标签: python pandas pandas-groupby

我有一个包含三个字段的数据框:“位置”,“性”和“类别”。

字段位置的值在1到1000之间。 字段性别的值为“ m”或“ f” 字段类别的值在1到600之间。 我想要每个位置的商品计数,每种性别的商品类别值列表,例如[5,35,64,100, 216]

我尝试过类似的事情:

result5=df.loc[(df.sex=='M')&(df.category==5)].groupby(['location','category'])count()

我也可以为类别列表中的其他所需值编写相同的代码。 但这看起来很重复

我也尝试过类似的事情:

for i in [5,35,64,100, 216]:
    if i=5:
       result5=df.loc[(df.sex=='M')&(df.category==i)].groupby(['location','category'])count()

等 似乎也很重复。

能否请您提供一组简单的可迭代该过程的代码来帮助我? 非常感谢!

1 个答案:

答案 0 :(得分:0)

首先按Series.isin过滤数据,然后使用GroupBy.size按所有3列进行汇总:

L = [5,35,64,100, 216]
df1 = (df[df.location.isin(L)]
                .groupby(['location','sex','category'])
                .size()
                .reset_index(name='count'))