Pandas Groupby位于两列上,其中一列在Dataframe中的bins(范围)上

Pandas Groupby位于两列上,其中一列在Dataframe中的bins(范围)上,pandas,dataframe,python-3.7,Pandas,Dataframe,Python 3.7,我正在尝试根据某些用户属性将我的数据隔离到存储桶中,我希望看到每个存储桶中的一些计数。为此,我已将此数据导入到一个数据框中 我的数据包含用户城市、孩子年龄和他们的唯一id。我想知道居住在城市A并且有0-5岁孩子的用户数量 示例数据框如下所示: city kids_age user_id A 10 1 B 4 2 A 4 3 C 8 4 A

我正在尝试根据某些用户属性将我的数据隔离到存储桶中,我希望看到每个存储桶中的一些计数。为此,我已将此数据导入到一个数据框中

我的数据包含用户城市、孩子年龄和他们的唯一id。我想知道居住在城市A并且有0-5岁孩子的用户数量

示例数据框如下所示:

city  kids_age  user_id
A         10       1  
B          4       2
A          4       3        
C          8       4
A          3       5 
预期产出:

city   bin   count
A      0-5      2 
       5-10     1

B      0-5      1
       5-10     0

C      0-5      0
       5-10     1
我在两个专栏《城市和儿童年龄》上尝试了分组:

user_details_df_cropped_1.groupby(['city', 'kids_age']).count()
它给了我一个类似以下内容的输出:

city  kids_age  user_id   count
 A      10       1          1
         4       3          1
         3       5          1
 B       4       2          1 
 C       8       4          1
我返回按城市分组的用户,但不是按儿童年龄段(范围)分组的用户。我错过了什么?谢谢你的帮助

用于装箱、传递到、添加
0
行 最后一次转换为
数据帧
,方法是:

另一种解决方案,包含和用于添加由
0
填充的错误行:

bins = [0,5,10]
labels = ['{}-{}'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
b = pd.cut(df['kids_age'], bins=bins, labels=labels, include_lowest=True)
mux = pd.MultiIndex.from_product([df['city'].unique(), labels], names=['city','kids_age'])

df = (df.groupby(['city', b])
        .size()
        .reindex(mux, fill_value=0)
        .reset_index(name='count'))
print (df)
  city kids_age  count
0    A      0-5      2
1    A     5-10      1
2    B      0-5      1
3    B     5-10      0
4    C      0-5      0
5    C     5-10      1

解决方案1确实对我有效,但我没有尝试过解决方案2。谢谢!!如果年龄为0,会发生什么情况?然后使用
include\u lost=True
parameter;)太好了@耶斯雷尔如果年龄是0,会发生什么?
bins = [0,5,10]
labels = ['{}-{}'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
b = pd.cut(df['kids_age'], bins=bins, labels=labels, include_lowest=True)
mux = pd.MultiIndex.from_product([df['city'].unique(), labels], names=['city','kids_age'])

df = (df.groupby(['city', b])
        .size()
        .reindex(mux, fill_value=0)
        .reset_index(name='count'))
print (df)
  city kids_age  count
0    A      0-5      2
1    A     5-10      1
2    B      0-5      1
3    B     5-10      0
4    C      0-5      0
5    C     5-10      1