繁体   English   中英

熊猫数据框分组依据功能用法

[英]Pandas dataframe groupby function usage

我有pandas df,我正在其中尝试按'agr_group'将其'agr_group' 'agr_group'仅是使用diffcumsum函数的agr_signal的计数。

BeginDate   Consecutive    EndDate  end_price  start_price  total_return   agr_signal  agr_group  
 2018-03-22           14 2018-04-04   0.000838     0.000997     -0.159478   -1        1.0   
 2018-04-05            2 2018-04-06   0.000738     0.000754     -0.021220   -1        1.0    
 2018-04-07            2 2018-04-08   0.000769     0.000795     -0.032704   -1        1.0    
 2018-04-09            3 2018-04-11   0.000721     0.000713      0.011220    0        2.0   
 2018-04-12            9 2018-04-20   0.004812     0.000876      4.493151    1        3.0   
 2018-04-21           13 2018-05-03   0.004045     0.004250     -0.048235   -1        4.0

我正在尝试使用以下代码再次将df分组,

df1 = pd.DataFrame({'BeginDate1' : df.groupby('agr_group').BeginDate.first(), 
              'EndDate1' : df.groupby('agr_group').BeginDate.last(),
              'Consecutive1' : df.groupby('agr_group').size(),
                        'start_price1':df.groupby('agr_group').start_price.first(),
                        'end_price1':df.groupby('agr_group').start_price.last()}).reset_index(drop=True)

输出是

BeginDate1  Consecutive1   EndDate1  end_price1  start_price1
2018-03-22             3 2018-04-07    0.000795      0.000997
2018-04-09             1 2018-04-09    0.000713      0.000713
2018-04-12             1 2018-04-12    0.000876      0.000876
2018-04-21             1 2018-04-21    0.004250      0.004250

我也想打印agr_signal有发生,以及曾经在agr_signal1列:

 BeginDate1    Consecutive1   EndDate1  end_price1  start_price1 agr_signal1
----------------------------------------------------------------------------
    2018-03-22             3 2018-04-07    0.000795      0.000997  -1
    2018-04-09             1 2018-04-09    0.000713      0.000713   0 
    2018-04-12             1 2018-04-12    0.000876      0.000876   1
    2018-04-21             1 2018-04-21    0.004250      0.004250  -1

我认为需要DataFrameGroupBy.agg用的功能表列的字典,得到MultiIndex ,通过这样必要扁平化map和最后一个rename列:

d = {'BeginDate':['first','last', 'size'],
     'start_price':['first','last'], 
     'agr_signal':'first'}

df = df.groupby('agr_group').agg(d)
df.columns = df.columns.map('_'.join)

d = {'BeginDate_first':'BeginDate1',
     'BeginDate_last':'EndDate1',
     'BeginDate_size':'Consecutive1',
     'start_price_first':'start_price1',
     'start_price_last':'end_price1',
     'agr_signal_first':'agr_signal1'}
df = df.reset_index().rename(columns=d)
print (df)
   agr_group BeginDate1   EndDate1  Consecutive1  start_price1  end_price1  \
0        1.0 2018-03-22 2018-04-07             3      0.000997    0.000795   
1        2.0 2018-04-09 2018-04-09             1      0.000713    0.000713   
2        3.0 2018-04-12 2018-04-12             1      0.000876    0.000876   
3        4.0 2018-04-21 2018-04-21             1      0.004250    0.004250   

   agr_signal1  
0           -1  
1            0  
2            1  
3           -1  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM