Python获取CSV分组后结果列表最长ID的方法求助
问题:找出分组后result列表最长的id
我有一个包含id和result两列的CSV文件,同一个id可重复出现,对应result值可能相同或不同。希望按id分组后,找出对应result列表长度最长的id。
已完成分组代码:
grouped_data = data.groupby('id')['result'].apply(list)
得到的grouped_data是pandas.core.series.Series类型,不知道怎么获取各列表长度,请求帮助。
输入CSV示例:
id, result Test10001, 400 Test10001, 404 Test10001, 200 Test10002, 404 Test10002, 404 Test10003, 400
分组后输出:
id Test10001 [400, 404, 200] Test10002 [404, 404] Test10003 [400]
解决方案
方法1:基于已有的grouped_data计算长度
对grouped_data调用str.len()即可直接获取每个列表的长度,再通过idxmax()找到长度最大对应的id:
# 计算每个id对应的result列表长度 length_series = grouped_data.str.len() # 找出长度最大的id及对应长度 max_length_id = length_series.idxmax() max_length = length_series.max() print(f"列表最长的id是{max_length_id},长度为{max_length}")
运行后输出:列表最长的id是Test10001,长度为3
方法2:直接分组计数(更高效)
如果不需要保留result的列表内容,直接用size()分组统计次数更高效,避免生成列表的额外开销:
# 按id分组,统计每个id的记录数 count_series = data.groupby('id').size() # 找出计数最大的id及对应长度 max_length_id = count_series.idxmax() max_length = count_series.max() print(f"列表最长的id是{max_length_id},长度为{max_length}")
内容的提问来源于stack exchange,提问作者Indi
相关产品推荐
相关产品推荐

