2017-03-17 12 views
1

私はいくつかの日付と2つのタイプの値を持つデータフレームを持っています。最大値と最小値、もちろん値の量または量です。日付でデータフレームをグループ化する

私は日と月で、(私はグループ化が正しい用語であるかどうかわからないです)、このデータフレームのグループにしよう(私はすべての年の最大値と最小毎日値を取得したい)とも分裂してい
Date  Type  Quantity 
2008-01-01 Max  100 
2008-01-01 Max  105 
2008-01-01 Min  80 
2008-01-01 Min  75 
2009-01-01 Max  101 
2009-01-01 Max  106 

それは2シリーズの最大値と最小値であるので、最終結果は次のようになります。 私はすでにうるう年の2〜29日などの日付を削除しているので、意味があります。

Date  Type  Quantity 
01-01  Max  106 
01-02  Max  107 
01-03  Max  104 



Date  Type  Quantity 
01-01  Min  75 
01-02  Min  72 
01-03  Min  74 

どのようにこの問題に取り組んでいますか?

ありがとうございます!

+0

。私はあなたの入力データがあなたの出力と一致しないので混乱しています。私はこの質問に答えるのをやめた。他の人たちはまだあなたに答えを与えようとしています。うまくいけば、それはあなたに役立つでしょう。しかし、将来の参考として、あなたが得る回答の質は質問の質の多くに左右されます。試行したデータとコードを使用して問題を明確にすることに努力すると、良い回答を得るチャンスが劇的に向上します。 – piRSquared

+0

ありがとうございます。私はデータ入力と出力でより具体的にしようと考えていますが、簡単にするために変更します! –

答えて

2

あなたはdfmaxdfminboolean indexingための最後、super solution of BrenBarndictによってstrftimeと列Typeと集計maxminによって作成Seriesgroupbyを使用することができます。

ただ、あなたにいくつかのフィードバックを与える
print (df) 
     Date Type Quantity 
0 2008-01-01 Max  100 
1 2008-01-02 Max  105 
2 2008-01-01 Min  80 
3 2008-01-01 Min  75 
4 2009-01-02 Max  101 
5 2009-01-01 Max  106 
print (df.Date.dt.strftime('%m-%d')) 
0 01-01 
1 01-02 
2 01-01 
3 01-01 
4 01-02 
5 01-01 
Name: Date, dtype: object 

func_map = {'Min': min, 'Max': max} 
df1 = df.groupby([df.Date.dt.strftime('%m-%d'), 'Type'])['Quantity'] 
     .apply(lambda g: func_map[g.name[1]](g)) 
     .reset_index() 
print (df1) 
    Date Type Quantity 
0 01-01 Max  106 
1 01-01 Min  75 
2 01-02 Max  105 

mask = df1.Type == 'Max' 
dfmax = df1[mask] 
print (dfmax) 
    Date Type Quantity 
0 01-01 Max  106 
2 01-02 Max  105 

dfmin = df1[~mask] 
print (dfmin) 
    Date Type Quantity 
1 01-01 Min  75 
+0

おかげで、これは本当に役に立ちました! –

+0

うれしいことができますよ!がんばろう!私の答えが役に立ったら、[受諾](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 – jezrael

関連する問題