比较python中的中位数和总和

时间:2017-05-20 12:53:14

标签: python median

我有针对具有类别和审核计数的商家的数据。我已将每个业务的类别分组在一起,并且我希望将那些审核计数高于每个类别中的审核计数中位数以及低于审核计数中位数的业务分开。基本上,我需要返回按类别索引的一系列中值,并使用它来确定给定的业务是否大于其类别的中位数。我必须将其审核次数与其类别的中位数进行比较。 我的代码抛出错误,我无法弄清楚原因。建议?我已尝试过以下两种方式。

n = df.groupby('category')['review_count'].size()
def cats_median_split(n):
    s = df.groupby('category')['review_count'].median()
if n > s:
    return True
else:
    return False
df.groupby('category')['review_count'].apply(cats_median_split)

OR:

n = df.groupby('category')['review_count'].sum()
def cats_median_split(n): 
    s = n.median()
if n > s:
    return True
else:
    return False
df.groupby('category')['review_count'].apply(cats_median_split)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望:



def median (seq, index=0):
    customcmp = lambda x, y: cmp(x[index], y[index])
    seq = sorted(seq, customcmp)
    l = len(seq)
    if l%2==0:
        return (seq[l/2-1][index]+seq[l/2][index])/2.0
    return seq[l/2][index]

def split (seq, index=0, trashhold=0):
    left = []; right = []
    for element in seq:
        if element[index]<trashhold:
            left.append(element)
        else:
            right.append(element)
    return left, right

cats = [(123, 345), (99, 258), (9753, 36754), (234, 216), (123456, 76543)]
m = median(cats, 1)
split(cats, 0, m)

For median you better use numpy, but for smaller sequences this implementation will do.