2017-06-25 11 views
1

IDをdatetimeオブジェクトにマップし、与えられたIDの数値スコアをマップする辞書があります。私がしたいことは、キーと値のペアがその月のすべてのオブジェクトの月と平均スコアである新しい辞書を作成することです。この辞書を作るのに最も簡単な方法は何でしょうか?ありがとう!月単位でPythonでdatetimeオブジェクトをグループ化する

これは、辞書はどのようなものか...

{878947806442119168: [datetime.datetime(2017, 6, 25, 12, 7, 41), 0.5411], 
878946025662296064: [datetime.datetime(2017, 6, 25, 12, 0, 37), -0.522], 
878725385235701761: [datetime.datetime(2017, 6, 24, 21, 23, 52), 0.6588], 
878717095701336064: [datetime.datetime(2017, 6, 24, 20, 50, 56), -0.5992], 
878715504063643648: [datetime.datetime(2017, 6, 24, 20, 44, 36), 0.3724], 
878711517537083392: [datetime.datetime(2017, 6, 24, 20, 28, 46), -0.3595] ... 
} 

と私は希望する のようなものである:私はあなたが最初DataFrame.from_dictが必要だと思う

+1

リンクがhttps://pandas.pydata.org/pandas-docs/を助けることを願って使用することができます安定/生成/ pandas.DataFrame.from_dict.html およびhttps://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html – Wen

答えて

2

と{月、その月の平均スコア} dt.monthまたはstrftimeと、その後groupby、最後to_dict

df = pd.DataFrame.from_dict(d, orient='index') 
d = df.groupby(df[0].dt.month)[1].mean().to_dict() 
print (d) 
{6: 0.015266666666666687} 

または:

d = df.groupby(df[0].dt.strftime('%b'))[1].mean().to_dict() 
print (d) 
{'Jun': 0.015266666666666687} 

d = df.groupby(df[0].dt.strftime('%b-%Y'))[1].mean().to_dict() 
print (d) 
{'Jun-2017': 0.015266666666666687} 
0

pandasを使用せずに、あなたもdefaultdict

from collections import defaultdict 
# initialize with list 
new_dict = defaultdict(list) 

# update each keys and values as list 
for pairs in my_dict.values(): 
    new_dict[str(pairs[0].month)].append(pairs[1]) 

# getting average 
final_dict = {key: sum(values)/len(values) for key, values in new_dict.items()}