python-3.x - 如何根据熊猫中列的条件进行聚合?
问题描述
我有一个如下所示的数据框:
df:
id|flag|fee
1 |0 |5
1 |0 |5
1 |1 |5
1 |1 |5
DESRIED df_aggregated:
id|flag|fee
1 |2 |10
聚合应该计算每个 id 的标志数量,并且当标志设置为 1 时,费用应该是每个 id 的总和:
df1=df.groupby(['id'])["flag"].apply(lambda x : x.astype(int).count()).reset_index()
df2=df.groupby(['id'])["fee"].apply(lambda x : x.astype(int).sum()).reset_index()
df_aggregated=pd.merge(df1, df2, on='id', how='inner')
ACTUAL df_aggregated:
id|flag|fee
1 |2 |20
我的费用汇总不正确/不完整,因为它没有考虑仅在 FLAG=1 时对费用求和的条件。相反,如果总结了有关旗帜的所有费用。如何更改我的代码以解决这种情况?它应该看起来像 DESIRED df_aggregated 表。
谢谢!
解决方案
您需要检查条件flag==1
。fee
在这样做时,您可以乘以df.flag.eq(1)
:
(df.assign(fee=df.fee*df.flag.eq(1))
.groupby('id', as_index=False)
.agg({'flag':'nunique', 'fee':'sum'})
)
输出:
id flag fee
0 1 2 10
如果您只想计算/求和where ,您可以先进行查询:flag==1
(df.query('flag==1')
.groupby('id', as_index=False)
.agg({'flag':'count', 'fee':'sum'})
)
顺便说一下,它给出了与上面相同的输出。
推荐阅读
- .htaccess - 如果我有第二个,第一个 RewriteRule 会被跳过吗?
- python - 摆脱熊猫数据框中的所有换行符
- bash - curl命令中的bash脚本变量替换
- python - 为什么sklearn MinMaxScaler归一化稀疏矩阵只会输出-1和1值
- td-engine - tdengine 数据库中的多级存储
- python - 如何在 twint 中使用 since 和 until 参数?
- python - 如何使用 django 将来自 chromedriver 的文件正确保存在 docker 容器中?
- django - 为什么 Django 开发服务器没有重新加载?
- reactjs - 动态填充菜单组件 - React Material UI
- wordpress - 更改 Wordpress 网站的域名