【问题标题】:Calculating % increase/decrease for a trend in a dataframe计算数据框中趋势的百分比增加/减少
【发布时间】:2020-11-06 00:08:39
【问题描述】:

对 Python 和 pandas 非常陌生。 我有一个数据文件,它有一个趋势列(-1 表示向下,0 表示中性,1 表示向上)和一个数据列(下面的示例)。我正在尝试计算此文件中每个趋势段的百分比增加/减少。例如,第 1-8 行下降了 -1.21%,第 11-20 行上升了 0.40%,等等。

尝试将文件拆分为每个趋势的多个文件,但对于我拥有的非常大的文件来说这并不实用。

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

trend,temp,,
-1,9.321,,
-1,9.305,,
-1,9.296,,
-1,9.288,,
-1,9.265,,
-1,9.241,,
-1,9.221,,
-1,9.208,,
0,9.201,,
0,9.198,,
1,9.203,,
1,9.206,,
1,9.21,,
1,9.215,,
1,9.218,,
1,9.223,,
1,9.25,,
1,9.28,,
1,9.235,,
1,9.241,,
-1,9.24,,
-1,9.237,,
-1,9.23,,
-1,9.227,,
-1,9.221,,
-1,9.217,,
-1,9.212,,
-1,9.208,,
-1,9.204,,
0,9.201,,

【问题讨论】:

    标签: python pandas dataframe calculation


    【解决方案1】:

    您可以使用.groupby 查找连续组,然后使用自定义函数对其进行转换:

    df['perc'] = df.groupby((df['trend'] != df['trend'].shift(1)).cumsum())['temp'].transform(lambda x:  (x.values[-1] - x.values[0])/(x.values[0])) * (df['trend'] != 0) * 100
    print(df)
    

    打印:

        trend   temp      perc
    0  -1      9.321 -1.212316
    1  -1      9.305 -1.212316
    2  -1      9.296 -1.212316
    3  -1      9.288 -1.212316
    4  -1      9.265 -1.212316
    5  -1      9.241 -1.212316
    6  -1      9.221 -1.212316
    7  -1      9.208 -1.212316
    8   0      9.201 -0.000000
    9   0      9.198 -0.000000
    10  1      9.203  0.412909
    11  1      9.206  0.412909
    12  1      9.210  0.412909
    13  1      9.215  0.412909
    14  1      9.218  0.412909
    15  1      9.223  0.412909
    16  1      9.250  0.412909
    17  1      9.280  0.412909
    18  1      9.235  0.412909
    19  1      9.241  0.412909
    20 -1      9.240 -0.389610
    21 -1      9.237 -0.389610
    22 -1      9.230 -0.389610
    23 -1      9.227 -0.389610
    24 -1      9.221 -0.389610
    25 -1      9.217 -0.389610
    26 -1      9.212 -0.389610
    27 -1      9.208 -0.389610
    28 -1      9.204 -0.389610
    29  0      9.201  0.000000
    

    你可以另外分组:

    print( df.groupby((df['trend'] != df['trend'].shift(1)).cumsum())['perc'].first() )
    

    打印:

    trend
    1   -1.212316
    2   -0.000000
    3    0.412909
    4   -0.389610
    5    0.000000
    Name: perc, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2017-10-13
      相关资源
      最近更新 更多