【问题标题】:% Increase value in number record% 增加数字记录中的值
【发布时间】:2020-08-24 09:58:23
【问题描述】:

我的数据集

name date        record   
A    2018-09-18      95       
A    2018-10-11     104      
A    2018-10-30     230       
A    2018-11-23     124       
B    2020-01-24      95       
B    2020-02-11     167       
B    2020-03-07      78    

如您所见,按名称和日期有几条记录。

对比之前的记录,我想看看涨幅最大的记录。

输出我想要的东西

name record_before_date record_before record_increase_date record_increase increase_rate
A            2018-10-11           104           2018-10-30             230        121.25
B            2020-01-24            95           2020-02-11             167         75.79

我不是在比较最低和最高,但我想在下一个记录出现时检查上升率最高的记录,以及上升率。

增长率公式 = (record_increase - record_before) / record_before * 100

任何帮助将不胜感激。 感谢阅读。

【问题讨论】:

    标签: python pandas numpy compare


    【解决方案1】:

    用途:

    #get percento change per groups
    s = df.groupby("name")["record"].pct_change()
    #get row with maximal percent change
    df1 = df.loc[s.groupby(df['name']).idxmax()].add_suffix('_increase')
    #get row with previous maximal percent change
    df2 = (df.loc[s.groupby(df['name'])
             .apply(lambda x: x.shift(-1).idxmax())].add_suffix('_before'))
    #join together
    df = pd.concat([df2.set_index('name_before'), 
                    df1.set_index('name_increase')], axis=1).rename_axis('name').reset_index()
    #apply formula
    df['increase_rate'] = (df['record_increase'].sub(df['record_before'])
                                                .div(df['record_before'])
                                                .mul(100))
    print (df)
      name date_before  record_before date_increase  record_increase  \
    0    A  2018-10-11            104    2018-10-30              230   
    1    B  2020-01-24             95    2020-02-11              167   
    
       increase_rate  
    0     121.153846  
    1      75.789474  
    

    【讨论】:

    • 你好@jezrael,我遇到了错误,第 2 行,'Passing list-likes to .loc or [] with any missing labels is no longer supported, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'
    • @ybin - 在这个解决方案之前是否可以使用df = df.reset_index(drop=True)
    • @ybin - 如果有一些只有 1 或 2 行的组发生了什么?
    • @ybin - 测试错误意味着有一些组只有一行。
    • 哦,我知道我会检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2020-02-28
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2017-11-10
    • 2016-05-10
    相关资源
    最近更新 更多