我最近刚从R转换到python,在使用 Dataframe 时遇到了一些麻烦,而不是使用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)])
})
型
谢谢你!这似乎是一个简单的问题,但我在任何地方都找不到。
4条答案
按热度按时间7tofc5zh1#
为了补充unutbu的答案,这里有一个在groupby对象上使用
apply
的方法。字符串
f45qwnt82#
可能有更好的方法;我对Pandas很陌生,但这个方法很有效:
字符串
收益率
型
x4shl7ld3#
一个老问题;我觉得一个更好的方法,避免应用,将是创建一个新的框架,分组和聚合之前:
字符串
另一种选择是在分组之前解栈;然而,我觉得这是一个更长,不必要的过程:
型
kkih6yb84#
这里,我最近使用df assign和numpy的where方法学到了什么:
df3=
个字符
结局=
型
这也类似于如果您熟悉SQL case并希望在pandas中应用相同的逻辑
型