我在Pandas DataFrame中有一个降水数据系列,其索引为2009-2018(3652)之间的日期。我正在尝试找到一种方法,以相对于平均值的一定百分比来减少或增加累积降水量(值<平均值的减少,值>平均值的增加)。
我设法做的事
仅包含非零值的列表,对其进行排序,然后按均值的位置成比例地增加或减少值。像这样:
蓝线代表原始值。橙色线增加和减少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%,但所有值之间都成比例。
答案 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()
输出: