对groupby中熊猫的行为感到困惑

时间:2019-03-10 10:49:50

标签: python pandas pandas-groupby

我有一个很大的数据集,其中除其他外还有一个二进制变量:

Transactions['has_acc_id_and_cus_id'].value_counts()
1    1295130
0     823869
Name: has_acc_id_and_cus_id, dtype: int64

当我使用这个特定的二进制变量作为一个分组变量对这个数据集--Transactions进行分组时,我得到一个分组的数据集--df100--仅具有上述二进制变量的一个级别。

df100 = Transactions.groupby(['acc_reg_year', 'acc_reg_month', 'year', 'month',\
                              'has_acc_id_and_cus_id'])[['net_revenue']].agg(['sum', 'mean', 'count'])

df100['has_acc_id_and_cus_id'].value_counts()
1    1421
Name: has_acc_id_and_cus_id, dtype: int64

1 个答案:

答案 0 :(得分:0)

如果您真的只想在groupbyhas_acc_id_and_cus_id,那么您想要的命令将是...

df100 = Transactions[['has_acc_id_and_cus_id', 'net_revenue']].groupby(['has_acc_id_and_cus_id']).agg(['sum', 'mean', 'count'])

这只是您要汇总的变量(has_acc_id_and_cus_id和您要汇总的变量(net_revenue)的子集...

Transactions[['has_acc_id_and_cus_id', 'net_revenue']]

...然后按has_acc_id_and_cus_id对这些分组...

Transactions[['has_acc_id_and_cus_id', 'net_revenue']].groupby('has_acc_id_and_cus_id')

......然后应用agg()函数以获取所需的统计信息。

您仅根据has_acc_id_and_cus_id进行汇总的既定目标而犯的错误就是,您要对其他四个变量进行分组(acc_reg_yearacc_reg_monthyearmonth)。

如果您确实希望在其他所有has_acc_id_and_cus_id内添加 ,则您的原始代码是正确的,但是一个或多个acc_reg_year中可能缺少值,acc_reg_monthyearmonth,当has_acc_id_and_cus_id == 0时,请检查您的数据...

Transactions[Transactions[`has_acc_id_and_cus_id`] == 0][[`acc_reg_year`, `acc_reg_month`, `year`, `month`]].head(100)