给定Python2.7中的列表列表:

[['OCT 27, 2015',2,4,6,8],['NOV 03, 2015',1,5,9,2],['NOV 05, 2015',2,4,6,8]]

一般情况下,如何打印列表的平均值;然后根据一周中的某一天打印平均值。如:
2.5, 6.5, 10.5, 9, 1.5, 4.5, 7.5, 5, 2, 4, 6, 8

哪里:
1.5、4.5、7.5、5是自星期二以来在该列表中出现两次的上述平均值
2.5、6.5、10.5、9是列表的平均值
那么2,4,6,8是星期四发生的平均数
我很确定我可以使用zip()函数来获取所有类似的值。我只是不确定一周中每天(星期一,星期二,星期三,…)的平均值
如何将其组织成一个简洁的表格格式,其中包含“平均值”和“星期一、星期二…”等其他标题
   Averages     Monday      Tuesday      Wednesday   Thursday   Friday  Saturday Sunday
2.5 6.5 10.5 9    0      1.5 4.5 7.5 5       0       2 4 6 8       0       0       0

我应该用if语句吗?

最佳答案

对于pandas,这似乎是一项出色的工作:

from __future__ import print_function
import pandas as pd
import numpy as np

raw_data = [['OCT 27, 2015',2,4,6,8],['NOV 03, 2015',1,5,9,2],['NOV 05, 2015',2,4,6,8]]
pandas_data = pd.DataFrame(raw_data, columns=['Date', 'A', 'B', 'C', 'D'])
pandas_data["Date"] = pd.to_datetime(pandas_data["Date"])
print(pandas_data)
print(pandas_data.mean())

输出:
        Date  A  B  C  D
0 2015-10-27  2  4  6  8
1 2015-11-03  1  5  9  2
2 2015-11-05  2  4  6  8

A    1.666667
B    4.333333
C    7.000000
D    6.000000

这将为我们提供所有列的汇总统计信息,但对于一周中的特定日期,我将执行以下操作(遵循上面的代码):
pandas_data["Day of the Week"] = pandas_data["Date"].dt.dayofweek
grouped_data = pandas_data.groupby('Day of the Week').aggregate(np.mean)
print(grouped_data)

输出:
                   A    B    C  D
Day of the Week
1                1.5  4.5  7.5  5
3                2.0  4.0  6.0  8

pandas'星期一的惯例是星期一=0,星期日=6
pandas'groupby函数执行它在tin上所说的操作:它根据一些条件对数据进行分组,在本例中是“星期几”列。然后aggregate函数在这些组上运行给定的函数并给出结果。

10-07 19:20
查看更多