我有一个包含数百万条记录的数据框,我试图让整个数据框按一列'napciente'分组,即可完成。但是有63列我需要根据特定匹配聚合为字符串,例如,如果系列包含“SI”和任何其他字符串我想要返回“SI”作为我的聚合结果。
所以我需要定义自己的聚合,找到系列中的字符串并返回它。这里我只发布1组数据和截断列
data.groupby('npaciente')['asistencia'].apply(lambda x: if x.str.find("SI"): return "SI")
以上是无效的,建议?
答案 0 :(得分:1)
您可以直接在apply
对象上使用groupby
,然后在自定义函数中,只需返回pd.Series
,以便pandas将其称为列:
def agg_func(group):
"""group is actually a dataframe containing only the relevant rows"""
result = {}
if group["asistencia"].str.find("SI").any()
result["asistencia"] = "SI"
return pd.Series(result)
data.groupby('npaciente').apply(agg_func)
当然,您需要向agg_func
添加更多逻辑,以便它能够执行您想要的操作。