3 回答
TA贡献1770条经验 获得超3个赞
您可以使用pd.cut来避免对范围进行硬编码。只需剪切数据,然后应用即可cumsum:
binned_data = pd.cut(df.Fair,
bins=[0, 5, 10, np.inf],
labels=['>=0', '>=5', '>=10'],
right=False)
df = (pd.get_dummies(binned_data)
.sort_index(axis=1, ascending=False)
.cumsum(1)
.groupby(df.BusId, sort=False)
.sum()
.iloc[:, 1::-1]))
df
>=5 >=10
BusId
abc1 2 1
abc2 2 0
abc3 1 0
abc4 0 0
TA贡献1831条经验 获得超10个赞
为避免聚合,您也可以apply改用。实质与user3483203的答案相同:
df.groupby('BusId').apply(lambda x: pd.Series(
dict(five=(x.Fair >= 5).sum(),
ten=(x.Fair >= 10).sum())))
# BusId five ten
# abc1 2 1
# abc2 2 0
# abc3 1 0
# abc4 0 0
添加回答
举报