与平均值成正比的增加和减少数据系列

时间:2019-07-12 09:29:18

标签: python pandas numpy dataframe data-science

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

我设法做的事

仅包含非零值的列表,对其进行排序,然后按均值的位置成比例地增加或减少值。像这样:

enter image description here

蓝线代表原始值。橙色线增加和减少200%(以清楚的示例为例)(现在为负值,但不会发生20%的百分比)。平均值为4.65,在这种情况下为1261。

问题 现在,我不想对下面的数据框执行此操作,而是将所有降水值保持在适当的位置。

[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%,但所有值之间都成比例。

1 个答案:

答案 0 :(得分:1)

假设您的数据y越大,我总是在增长。否则,您需要先对数据进行排序。

首先,您需要根据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()

输出:

enter image description here