1 回答
TA贡献1828条经验 获得超3个赞
groupby
避免在运行时出现循环解决方案,sort=True
但您可以按原始数据帧的顺序进行分配。此外,您正在迭代地检查标量值,而不是通过向量化的系列。
相反,请考虑groupby().apply()
使用np.select
ornp.where
有条件地分配gs_pred列的方法。使用这种方法,您可以保持所有组和基础值不变:
def calc_groups(g):
# LOGICAL CONDITIONS
cond1 = (g['id'].nunique() > 2) & (g['nnDist1'] < mindist) & (g['nnDist2'] < maxdist)
cond2 = (g['id'].nunique() == 2) & (g['nnDist1'] < mindist) & (g['nnDist2'] > maxdist)
cond3 = (g['id'].nunique() < 2)
# NUMPY SELECT APPROACH
g['gs_pred2'] = np.select([cond1, cond2, cond3], [2, 1, 0], default=9)
# NUMPY WHERE APPROACH
g['gs_pred3'] = np.where(cond1, 2,
np.where(cond2, 1,
np.where(cond3, 0, 9)
)
)
return g
# RUN ASSIGNMENT BY GROUP(S)
result1 = (result1.groupby([pd.Grouper(key='date', freq="5S"), 'table'], as_index=False)
.apply(calc_groups))
添加回答
举报