在汇总条件语句时对一列进行分组并创建一个新列

时间:2019-10-09 16:29:55

标签: python pandas aggregate pandas-groupby

我要按颜色分组,计算一列中该颜色的出现次数,并创建一个新的列within_range,其中将包含以下情况的次数: min_amount <= amount <= max_amount

df = pd.DataFrame({'color': ['red', 'yellow', 'blue', 'red','yellow'], 
                   'amount': [0.5, 0.25, 0.125, 0.9, 0.8],
                   'min_amount': [0, 0.2, 0.1, 0.5, 0.7],
                   'max_amount':[1, 0.7, 0.2, 0.6, 0.9]})

可以使用以下方法计算出现次数:

df.groupby('color').agg({'color':'count'}),但如何获得预期的结果?

预期结果:

color         count    within_range
red             2            1
yellow          2            2
blue            1            1

1 个答案:

答案 0 :(得分:2)

您只需要定义within_range系列和分组依据:

df['within_range'] = (df['amount'].le(df['max_amount']) 
                      & df['amount'].ge(df['min_amount'])
                     )

(df.groupby('color')['within_range']
   .agg(count='count',winthin_range='sum')
)

输出:

        count  winthin_range
color                       
blue        1            1.0
red         2            1.0
yellow      2            2.0