计算嵌套列表中元素的出现次数,并执行计算

时间:2017-11-06 03:16:37

标签: python python-3.x relational-database rdbms nested-lists

标题有点误导,因为我真的不知道如何描述这个

假设我有一个嵌套列表,如下所示:

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']]

在此嵌套列表中,有2014年的4个列表,以及2013年的2个列表。

我希望得到每年平均价值。所以对于2014年,我想做,

(1234 + 4123 + 5754 + 8548) / 4 

和2013年,

(9469 + 3564) / 2

我需要得到每年的事件,因为我需要平均每年的总和。 最后,我想要类似的东西,

new = [[4914.75, '2014'],[6516.5, '2013']]

请注意,日期不是'01 / 03/2014',而只是'1/3/2014'

如何做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用Pandas来执行此操作。

import pandas as pd

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']]

df = pd.DataFrame(a)

df[1] = pd.to_datetime(df[1])

df = df.set_index(1)

df.groupby(df.index.year.astype(str)).mean()\
  .reset_index().values.tolist()

输出:

[['2013', 6516.5], ['2014', 4914.75]]

答案 1 :(得分:1)

上述答案有效,如果你不习惯使用熊猫,你可以参考这个。

fun SQLiteDatabase.executeTransaction(transactionFun: (SQLiteDatabase) -> Unit){
    try{
        beginTransaction()
        transactionFun(this)
        setTransactionSuccessful()
    }finally {
        endTransaction()
    }
}

答案 2 :(得分:0)

试试这个(假设内部列表总是长度为2,第二个是日期):

from collections import defaultdict

cumulatives = defaultdict(int)
counts = defaultdict(int)
for (amount, dt) in a:
    key = dt[-4:]
    cumulatives[key] += amount
    counts[key] += 1.0

output = [[cumulatives[key]/counts[key], key] for key in cumulatives.keys()]
print(output)