[(-0.0625, u'2017-02-14'), (0.21428571428571427, u'2017-02-14'), (0.125, u'2017-02-14')]
私はこのようなタプルのリストを持っています。私は年の各月に応じて小数点の平均を取得しようとしています。Pythonの日付によるグループタプル
このようなことを行う最速の(スピードの点で)比類のない方法は何ですか?
[(-0.0625, u'2017-02-14'), (0.21428571428571427, u'2017-02-14'), (0.125, u'2017-02-14')]
私はこのようなタプルのリストを持っています。私は年の各月に応じて小数点の平均を取得しようとしています。Pythonの日付によるグループタプル
このようなことを行う最速の(スピードの点で)比類のない方法は何ですか?
私は別の月に追加され、ここであなたが外部のライブラリなしで何ができるかです:速度や行数の面で最速
a = [(-0.0625, u'2017-02-14'), (0.21428571428571427, u'2017-02-14'), (0.125, u'2017-02-14'), (-0.1625, u'2017-03-14'), (0.21428571428571427, u'2017-03-14'), (0.125, u'2017-03-14')]
months = list(set(['-'.join(item[1].split('-')[:2]) for item in a]))
grouped_data = [[x[0] for x in a if '-'.join(x[1].split('-')[:2]) == month] for month in months]
result = {month: sum(item)/len(item) for month, item in zip(months, grouped_data)}
月によって正常に集計されます。しかし、それは別の年を区別しません。私は別の年にもフィルタをかける解決策を探していた –
そして今それは:) – zipa
使用パンダ、データフレームを作成し、毎月にリサンプリングし、各月の平均値を計算する:
import pandas as pd
l = [(-0.0625, u'2017-02-14'),
(0.21428571428571427, u'2017-02-14'),
(0.125, u'2017-02-14')]
df = pd.DataFrame(l, columns=['value','date'])
df['date'] = pd.to_datetime(df.date)
df = df.set_index('date')
print df.resample('M').mean()
イテレータは、一般的にかなり速いです。 itertools.groupby
を使用できます。これは、あなたがその場で行うことができます日付(または少なくとも月ごと)、によってソートされるリストを必要とします。
from itertools import groupby
from datetime import date
from calendar import month_name # This is just to pretty-print the month
# This can be a lambda if you prefer
def get_month(x):
return date.strptime(x[1], "%Y-%m-%d").month
l = [(-0.0625, u'2017-02-14'), (0.21428571428571427, u'2017-02-14'), (0.125, u'2017-02-14')].sort(key=get_month)
for mon, group in groupby(l, get_month)
group = [x[0] for x in group]
mean = sum(group)/len(group)
print('Sum for month {}: {}'.format(month_name[mon], mean))
あり、月を抽出するために、いくつかの方法があり、strptime
はおそらく最速ではありませんしかし、それは最も安全で最も柔軟です。
? –
また、これはタプルのリストであり、タプルではありません。 –
'sorted(list_of_tuples、key =ラムダタプル:タプル[1])'。 – erip