熊猫分组中的条件计数

时间:2021-06-12 17:11:31

标签: python pandas

我有以下数据框 enter image description here

我想通过以下方式重新格式化:

  1. 按名称/帐户/每月期间分组
  2. 平均(平均)余额保留两位小数
  3. 交易的平均值(平均值),没有小数位
  4. 余额 < 0 的天数
  5. 余额 > 最大信用额度的天数

所以我应用以下函数来制作所有聚合的系列,并使用系列索引作为新列的标签:

 def f(x):
    d = {}
    d['Avg_Transactions'] = x['Transaction'].mean().round()
    d['Avg_Balance'] = x['Balance'].mean().round(2)
    d['Zero_Balance_days'] = (x['Balance'] < 0).count() 
    d['Over_Credit_days'] = (x['Balance'] > x['Max Credit']).count()
    return pd.Series(d, index=['Avg_Transactions', 'Avg_Balance', 'Zero_Balance_days', 'Over_Credit_days'])

month = df.groupby(['Account','Name', 'Month']).apply(f)

给出以下输出: enter image description here

但我得到的条件计数错误,而是计算所有天数。 写这些的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试将您的 2 行替换为 .count().sum(),如下所示:

d['Zero_Balance_days'] = (x['Balance'] < 0).sum() 
d['Over_Credit_days'] = (x['Balance'] > x['Max Credit']).sum()

.count() 返回布尔索引系列中非 NA/null 观察的数量,而 True/False 都不是 NA/null 并且也会被计数。

.sum() 返回 True 的条目总和,因为 True 被解释为 1False 在总和中被解释为 0 .