基于分组字段计算唯一值

2024-09-28 17:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,它根据另一个分组字段从列表中计算唯一值。下面是我的示例数据,listaa[i][0]表示分组字段,listaa[i][2]是必须分组的数字

listaa = [(u'2004-2006', 48600.0, 386011),
 (u'2004-2006', 900.0, 385792),
 (u'2004-2006', 16200.0, 385792),
 (u'2004-2006', 11700.0, 385792),
 (u'2004-2006', 900.0, 385792),
 (u'2006-2008', 900.0, 386198),
 (u'2006-2008', 39600.0, 385916),
 (u'2006-2008', 4500.0, 385916),
 (u'2006-2008', 900.0, 385916),
 (u'2006-2008', 900.0, 385916),
 (u'2008-2010', 11700.0, 386067)]

这是我的代码,它正在工作。我想知道是否有最简单的方法来做同样的事情

fechas = list(set([f[0] for f in listaa]))
fechas.sort()
lista1 = []
lista2 = []
for fecha in fechas:
    for l in listaa:
        if l[0] == fecha:
            lista1.append(l[2])
    lista2.append(str(len(set(lista1))))
    lista1 = []
print lista2

预期结果应该是:["2", "2", "1"]


Tags: 数据函数代码in示例列表for数字
2条回答

提供利用nunique()pandas解决方案:

import pandas as pd

listaa = [(u'2004-2006', 48600.0, 386011),
 (u'2004-2006', 900.0, 385792),
 (u'2004-2006', 16200.0, 385792),
 (u'2004-2006', 11700.0, 385792),
 (u'2004-2006', 900.0, 385792),
 (u'2006-2008', 900.0, 386198),
 (u'2006-2008', 39600.0, 385916),
 (u'2006-2008', 4500.0, 385916),
 (u'2006-2008', 900.0, 385916),
 (u'2006-2008', 900.0, 385916),
 (u'2008-2010', 11700.0, 386067)]

df = pd.DataFrame(listaa, columns=['Date','Val1','Val2'])

df.groupby('Date')['Val2'].nunique().tolist()

提供:

[2, 2, 1]

您可以使用defaultdict轻松统计每个组的唯一值(在手机上,很抱歉没有示例输出。)

from collections import defaultdict 

values = defaultdict(set) 
for row in data:
  values[row[0]].add(row[2])

相关问题 更多 >