繁体   English   中英

基于一个值添加新列

[英]Add a new column based on one value

我不知道这是否是我问题的正确标题。 无论如何,这是我简化的df:

    change   gain
0      NaN    NaN
1    216.0  216.0
2    270.0  270.0
3    167.0  167.0
4    -80.0    0.0
5   -338.0    0.0
6   -155.0    0.0
7    253.0  253.0
8   -385.0    0.0
9    -30.0    0.0
10   198.0  198.0
11   318.0  318.0
12   266.0  266.0
13   142.0  142.0
14    85.0   85.0
15   199.0  199.0
16    53.0   53.0
17    91.0   91.0
18   187.0  187.0
19    64.0   64.0
20   118.0  118.0

我想添加另一个名为average_gain的列,它从第 14 行开始,该行值等于: df['gain'].head(14).mean()即 140.769231。 到目前为止,我想要的 output 看起来像这样:

   change   gain  average_gain
0      NaN    NaN           NaN
1    216.0  216.0           NaN
2    270.0  270.0           NaN
3    167.0  167.0           NaN
4    -80.0    0.0           NaN
5   -338.0    0.0           NaN
6   -155.0    0.0           NaN
7    253.0  253.0           NaN
8   -385.0    0.0           NaN
9    -30.0    0.0           NaN
10   198.0  198.0           NaN
11   318.0  318.0           NaN
12   266.0  266.0           NaN
13   142.0  142.0           NaN
14    85.0   85.0    140.769231
15   199.0  199.0           NaN
16    53.0   53.0           NaN
17    91.0   91.0           NaN
18   187.0  187.0           NaN
19    64.0   64.0           NaN
20   118.0  118.0           NaN

然后对于第 14 行以下的行,我想使用此代码,例如第 15 行:

df.loc[15, 'average_gain'] = (df.loc[14, 'average_gain']*13)+df.loc[15,'gain']行的rest的公式相同。 因此,如果行号为 n,则公式为:

df.loc[n, 'average_gain'] = (df.loc[n-1, 'average_gain']*13)+df.loc[n,'gain']

我尝试了这两种方法但没有奏效:

def func(x):
    df['average_gain'].loc[n] = (df['average_gain'].loc[n - 1] * 13) + df['gain'].loc[n]
    return x

df['average_gain'].loc[15:] = (df['average_gain'].shift(1) * 13) + df['gain']

您可以使用:

df['average_gain'] = np.NaN
df['average_gain'][14] =  df['gain'].head(14).mean()
df

在此处输入图像描述

然后应用你的公式:

for i in range(15, len(df)):
    df.loc[i, 'average_gain'] = df.loc[i-1, 'average_gain'] * 13 + df.loc[i,'gain']
df

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM