Python列表 - 按第一项分组,计数和总和第二项

时间:2014-10-25 16:18:47

标签: python pandas

我有一个名为数据的列表

 [(4.0, 7.8, u'MNR'),
 (1.0, 6.4, u'MNR'),
 (9.0, 25.2, u'MNR'),
 (8.0, 5.8, u'MNR'),
 (7.0, 177.8, u'MNR'),
 (4.0, 10.0, u'MNR'),
 (2.0, 5.6, u'MNR'),
 (2.0, 29.6, u'MNR'),
 (1.0, 7.4, u'MNR'),
 (2.0, 2.8, u'MNR'),
 (8.0, 3.0, u'MNR'),
 (2.0, 8.4, u'MNR'),
 (3.0, 4.2, u'MNR'),
 (2.0, 11.8, u'MNR')]

pd.Index(data)
MultiIndex(levels=[[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0],

我知道如何以这种方式获取数据:

data[0][0]
4.0

我想遍历列表并计算第一行中每个级别的出现次数。输出应该是这样的,第二列代表计数:

1.0  - 2
2.0  - 4
3.0  - 1

然后我想得到第二列的总和:

1.0 - 13.8
2.0 - 58.2
3.0 - 4.2

然后平均

1.0  6.9
2.0  14.55
3.0  4.2

我尝试用循环做这件事我尝试使用zip认为如果我可以将单个列表的前两部分中的每一部分压缩到一个列表中,我就可以轻松地在这些列表上执行操作:

 for index, item in enumerate(data):
 item.count(data[0][0])

 zip(data[-3])

1 个答案:

答案 0 :(得分:3)

由于您使用的是pdMultiIndex,我将假设这是一个pandas问题。您可以使用groupbyagg一步完成此操作(groupby tutorial),而无需逐个迭代:

>>> df = pd.DataFrame(data)
>>> df.groupby(0)[1].agg(["count", "sum", "mean"])
   count    sum    mean
0                      
1      2   13.8    6.90
2      5   58.2   11.64
3      1    4.2    4.20
4      2   17.8    8.90
7      1  177.8  177.80
8      2    8.8    4.40
9      1   25.2   25.20
相关问题