2017-10-16 48 views
0

我有這樣一個數據幀:如何在每一天所看到(第一天,第二天,等)在大熊貓順序總結值

 id     Date  Volume  Price  Values(Volume*Price) 
    56033738624803469 20170111 1   943339 943339 
    56033738624803469 20170111 10   919410 9194100 
    56033738624803469 20170112 1   919410 919410 
    56033738624803469 20170112 5   954999 4774955 
    4659957480182399 20170207 1   1000000 1000000 
    4659957480182399 20170208 5   1000000 5000000 
    4659957480182399 20170208 40   1000000 40000000 

我要計算並繪製爲以下計算第一個100天,每個ID:每天

  1. 計算平均值在100天
  2. 該地塊所有IDS的
  3. 之後,劇情應該是這樣的:

Desired plothttps://i.stack.imgur.com/2cozR.png

這是我迄今所做的:

df2 = df.groupby(['Id', 'Date']).sum() 

結果是:

       Index Volume  Price  Values 
Id    Date            
1745829084228393 20170207  1  1000 1000000.0 1.000000e+09 
       20170208 5151 999000 101000000.0 9.990000e+11 
       20170403  1  12 1000100.0 1.200120e+07 
       20170408  1  12 1000000.0 1.200000e+07 
       20170417  1  500 1000000.0 5.000000e+08 
       20170423  3 14500 2000000.0 1.450000e+10 
       20170507  10 35000 4000000.0 3.500000e+10 
       20170510  21 49051 6000000.0 4.905100e+10 
       20170529  1  4 1000000.0 4.000000e+06 
2888358730233310 20170212 820 2000000 40000000.0 2.000000e+12 
2929948497881810 20170207 1830 1500000 60000000.0 1.500000e+12 
       20170208 903 700000 42000000.0 7.000000e+11 
       20170212 1176 800000 48000000.0 8.000000e+11 
3715246194918044 20150509  66  1008 11000000.0 1.008000e+09 

現在我要計算的平均每個ID的第一,第二,...的值,例如:

Date_Order  avg_Sum_Values(= summation first date of each id /(number of ids)) 
first_Date  875.5 e+9 
second_Date 849.5 e+9 

回答

0

我敢肯定有一個更簡潔的方式來做到這一點,但如果你沒事做了幾個合併,就可以一步一步的時間做到這一點:

In [1]: df 
Out[1]: 
    Id  Date Value 
0 1 2017-04-08  1 
1 1 2017-04-08  1 
2 1 2017-04-09  2 
3 2 2017-04-08  3 
4 2 2017-04-09  6 
5 2 2017-04-09  4 
6 3 2017-04-09  10 
7 3 2017-04-09  11 
8 3 2017-04-11  12 

In [2]: min_dates = df.groupby('Id', as_index=False).Date.min() 
    ...: df = pd.merge(df, min_dates, on='Id', suffixes=('', '_min')) 
    ...: df['Date'] = ((df['Date'] - df['Date_min'])/pd.Timedelta('1 day')).apply(int) 
    ...: df.groupby('Date').Value.sum() 
    ...: 
Out[2]: 
Date 
0 26 
1 12 
2 12 
Name: Value, dtype: int64 
+0

感謝,但我有日期時間範圍超過一天,例如我有2010年之間的日期至2017.may是我的問題是不夠清楚。例如在您的數據我想計算'20170408'(= 2)的'價值'的總和爲'id'1並且將其與值爲20170408的id'2'(= 3)相加並且與值相加20170409(= 31)(考慮到我有很大的天數) – ary

+0

這很好,只需要do是使用pd.to_datetime和pd.TimeDelta來讓你的類型正確,並且它會處理日期m爲你服務。我再次更新了我的答案,以演示如何正確使用這些類型。 – scnerd

相關問題