gpt4 book ai didi

python - pandas 聚合的条件总和

转载 作者:IT老高 更新时间:2023-10-28 21:10:14 25 4
gpt4 key购买 nike

我最近刚刚从 R 切换到 python,并且在再次习惯数据帧而不是使用 R 的 data.table 时遇到了一些麻烦。我遇到的问题是我想获取一个字符串列表,检查一个值,然后将该字符串的计数相加 - 由用户分解。所以我想把这些数据:

   A_id       B    C
1: a1 "up" 100
2: a2 "down" 102
3: a3 "up" 100
3: a3 "up" 250
4: a4 "left" 100
5: a5 "right" 102

然后返回:

   A_id_grouped   sum_up   sum_down  ...  over_200_up
1: a1 1 0 ... 0
2: a2 0 1 0
3: a3 2 0 ... 1
4: a4 0 0 0
5: a5 0 0 ... 0

在我用 R 代码做之前(使用 data.table)

>DT[ ,list(A_id_grouped, sum_up = sum(B == "up"),
+ sum_down = sum(B == "down"),
+ ...,
+ over_200_up = sum(up == "up" & < 200), by=list(A)];

但是,我最近使用 Python 的所有尝试都失败了:

DT.agg({"D": [np.sum(DT[DT["B"]=="up"]),np.sum(DT[DT["B"]=="up"])], ...
"C": np.sum(DT[(DT["B"]=="up") & (DT["C"]>200)])
})

提前感谢您!这似乎是一个简单的问题,但我在任何地方都找不到。

最佳答案

为了补充 unutbu 的答案,这是一种在 groupby 对象上使用 apply 的方法。

>>> df.groupby('A_id').apply(lambda x: pd.Series(dict(
sum_up=(x.B == 'up').sum(),
sum_down=(x.B == 'down').sum(),
over_200_up=((x.B == 'up') & (x.C > 200)).sum()
)))
over_200_up sum_down sum_up
A_id
a1 0 0 1
a2 0 1 0
a3 1 0 2
a4 0 0 0
a5 0 0 0

关于python - pandas 聚合的条件总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com