python如何先分组再算中数

python如何先分组再算中数

作者:Elara发布时间:2026-01-14阅读时长:0 分钟阅读次数:5

用户关注问题

Q
如何在Python中对数据进行分组计算?

我有一组数据,需要先按照某个字段进行分组,然后对每个分组的数据计算中位数,请问应该如何实现?

A

使用pandas库中的groupby和median方法

可以使用pandas库来完成分组和计算中位数的操作。首先,将数据加载为DataFrame,然后使用groupby方法按照指定字段分组,接着使用median方法计算每个分组的中位数。示例代码如下:

import pandas as pd

data = {'category': ['A', 'A', 'B', 'B', 'C'], 'value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

median_values = df.groupby('category')['value'].median()
print(median_values)

Q
是否可以只用Python内置函数实现分组求中数?

我想避免使用第三方库,只用Python基础功能来完成数据分组并计算中位数,有哪些方法?

A

利用字典和排序实现手动分组与中位数计算

可以通过遍历数据将其分组成字典,键为分组字段,值为对应的数值列表。随后对列表进行排序并计算中位数。例如:

data = [('A', 10), ('A', 20), ('B', 30), ('B', 40), ('C', 50)]

from collections import defaultdict
groups = defaultdict(list)

for key, val in data:
groups[key].append(val)

def median(lst):
lst = sorted(lst)
n = len(lst)
mid = n // 2
if n % 2 == 0:
return (lst[mid - 1] + lst[mid]) / 2
else:
return lst[mid]

median_per_group = {k: median(v) for k, v in groups.items()}
print(median_per_group)

Q
计算分组中位数时,如何处理缺失值?

分组中包含缺失数据,计算中位数时应该如何处理这些缺失值以避免影响结果?

A

对缺失值进行过滤后再计算中位数

在进行中位数计算之前,应当先清除或忽略缺失的数据(如None或NaN)。使用pandas时,groupby和median会默认忽略NaN值,不影响结果。如手动实现,则需要对数值列表做过滤:

filtered_vals = [x for x in vals if x is not None]

只有在filtered_vals非空时进行中位数计算,确保结果准确且不受缺失值干扰。