2017-11-11 12 views
0

以下は私のデータフレームです。それは複数の株式を持っています。このデータから2つのことを見つけようとしています。groupbyを日付とともに使用して最大値/最小値を見つける方法は?

1)すべての株式の相対的な変動の最小/最大の日付を見つける方法を教えてください。これは、対応する日付の各株の相対的な変動の最大値と最小値を意味します。

  Stock Date    relativevolatility 
0  AA.csv 2012-12-31   0.024419 
1  AA.csv 2012-12-28   0.012888 
2  AA.csv 2012-12-27   0.026482 
3  AA.csv 2012-12-26   0.018423 
4  AA.csv 2012-12-24   0.013994 
5  AA.csv 2012-12-21   0.017422 
6  AA.csv 2012-12-20   0.011541 
7  AA.csv 2012-12-19   0.026316 
8  AA.csv 2012-12-18   0.018120 
9  AA.csv 2012-12-17   0.019406 
10  AA.csv 2012-12-14   0.018454 
11  AA.csv 2012-12-13   0.017411 
12  AA.csv 2012-12-12   0.012673 
13  AA.csv 2012-12-11   0.019699 
14  AA.csv 2012-12-10   0.016442 
15  AA.csv 2012-12-07   0.016403 
16  AA.csv 2012-12-06   0.014011 
17  AA.csv 2012-12-05   0.022340 
18  AA.csv 2012-12-04   0.016677 
19  AA.csv 2012-12-03   0.011862 
20  AA.csv 2012-11-30   0.015458 
21  AA.csv 2012-11-29   0.017794 
22  AA.csv 2012-11-28   0.030102 
23  AA.csv 2012-11-27   0.016888 
24  AA.csv 2012-11-26   0.012019 
25  AA.csv 2012-11-23   0.010791 
26  AA.csv 2012-11-21   0.012092 
27  AA.csv 2012-11-20   0.020544 
28  AA.csv 2012-11-19   0.016857 
29  AA.csv 2012-11-16   0.027044 
     ...  ...     ... 
70666 ZION.csv 2012-02-15   0.018929 
70667 ZION.csv 2012-02-14   0.016287 

試み#1 df2.groupby([ '日付'、 '株'])[ 'relativevolatility']。合計()。idxmax()

これは私の時間/株式を与え、 1つの株式についてのみであり、私はその株式の相対的揮発性を最大限に引き上げているかどうかはわかりません。

試み#2 new.groupby([ '株'])[ 'relativevolatility']。AGG([pd.np.min、pd.np.max])

これは私のすべての分を与えます/株の最大値ですが、各株に対して最小値と最大値が発生したときに列を追加する方法はわかりません。

質問#1

は、どのように私は私の最大/最小の銘柄のために発生したときの日付と株式の最小/最大比揮発のすべてを与える表を印刷することができますか?

質問#2

はどのように平均的な相対揮発を見つけるが、曜日ごとに全ての銘柄のためのことができますか?

答えて

-1

あなたは idxminidxmaxを必要とし、その後concat

集計 mean
#if necessary 
#df['Date'] = pd.to_datetime(df['Date']) 

df1 = df.loc[df.groupby('Stock')['relativevolatility'].idxmin()].set_index('Stock') 
df2 = df.loc[df.groupby('Stock')['relativevolatility'].idxmax()].set_index('Stock') 

df = pd.concat([df1, df2], axis=1, keys=('min','max')) 
df.columns = df.columns.map('_'.join) 
print (df) 
      min_Date min_relativevolatility max_Date max_relativevolatility 
Stock                   
AA.csv 2012-11-23    0.010791 2012-11-28    0.030102 
ZION.csv 2012-02-14    0.016287 2012-02-15    0.018929 

weekday_name

df = (df.groupby(['Stock', df['Date'].dt.weekday_name])['relativevolatility'] 
     .mean() 
     .reset_index(name='means')) 
print (df) 
     Stock  Date  means 
0 AA.csv  Friday 0.016923 
1 AA.csv  Monday 0.016428 
2 AA.csv Thursday 0.017448 
3 AA.csv Tuesday 0.018386 
4 AA.csv Wednesday 0.020324 
5 ZION.csv Tuesday 0.016287 
6 ZION.csv Wednesday 0.018929 
関連する問題