【问题标题】:Increase and decrease data-series proportional to mean增加和减少与平均值成比例的数据序列
【发布时间】:2019-07-12 09:29:18
【问题描述】:

我在 Pandas DataFrame 中有一个降水数据系列,索引为 2009-2018 (3652) 之间的日期。我正在尝试找到一种方法,以给定百分比相对于平均值减少或增加累积降水量(减少值 平均值)。

我做到了

制作一个仅包含非零值的列表,对其进行排序并根据平均值的位置按比例增加或减少值。像这样:

蓝线代表原始值。橙色线 200%(为了清楚的例子)增加和减少(现在有负值,但不会发生 20% 的百分比)。平均值为 4.65,在本例中为 1261。

问题 现在我不想对像下面这样的 Dataframe 执行此操作,但保留所有降水值。

[3652 rows x 1 columns]
             Precipitation
2009-01-01   0.000000
2009-01-02   0.600000
2009-01-03   0.000000
2009-01-04   0.900000
2009-01-05   2.000000
2009-01-06   0.000000
...

问题 是否有人熟悉如何增加或减少与平均值成比例的值。这样最高和最低值实际增加和减少 20%,但所有值之间成正比。

【问题讨论】:

    标签: python pandas numpy dataframe data-science


    【解决方案1】:

    假设你的数据在进入更大的 x 时总是在增长。否则需要先对数据进行排序。

    首先,您需要根据 df 形状创建具有百分比比例的列。然后计算新值。

    给你:

    =^..^=

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    # create test data
    x = np.arange(1,20,1)
    y = x**0.1
    
    df = pd.DataFrame(y, columns=['data'])
    
    # find value for proportion shape
    def proportion_value(df):
        for i in np.arange(0.1, 100, 0.1):
            if len(df)-1 < i < len(df):
                return i
    
    
    percentage = 20
    # load proportion
    df['proportion'] = np.arange(-percentage, percentage, (percentage*2)/proportion_value(df))/100
    
    # calculate new data
    df['new_data'] = df['data'] + (df['data']*df['proportion'])
    
    # plot data
    df[['data', 'new_data']].plot()
    plt.show()
    

    输出:

    【讨论】:

    • 您好 Zaraki,感谢您的回答。但是它运行良好,当我尝试使用我自己的列表运行它时,我收到一个类型错误:df['proportion'] = np.arange(-percentage, percentage, (percentage*2)/proportion_value(df))/100 TypeError: unsupported operand type(s) for /: 'int' and 'NoneType' 列表的长度是 1893,我将它转换为 Numpy 数组(float32)并检查了 Nonetypes。
    • @Dylan_w 我认为您需要在 np.arange(0.1, 100, 0.1) 中增加值“100”。我的测试数据很小,这个循环根据原始df的形状找到比例形状的值
    • 迪伦,不要粗鲁——甚至对你自己也不行。
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2017-12-08
    • 2014-10-17
    • 1970-01-01
    相关资源
    最近更新 更多