如何使用Pandas DataFrame计算列的x百分比

时间:2019-04-05 15:39:03

标签: python pandas

我正在尝试使用pd.Series计算x列值的百分比。我收到NoneType错误。不太确定我在做什么错。

def PctMA(self, df, pct):
    pctName = 'PCT' + str(pct)
    pctDecimal = float(pct/100)
    pctCalulated = pd.Series((df['value'] - (df['value'] * pctDecimal)), name = pctName)
    df = df.join(pctCalulated)
    return df
I get the below error when I execute the code.

    pctCalulated = pd.Series((df['value'] - (df['value'] * pctDecimal)), name = pctName)
TypeError: 'NoneType' object has no attribute '__getitem__'

以下是预期结果,其中Pct1生成为值的1%列。

index   value   pct1
1   2476    2451.24
2   2475    2450.25
3   2486    2461.14
4   2536    2510.64
5   2453    2428.47
6   2486    2461.14
7   2648    2621.52
8   2563    2537.37
9   2756    2728.44

2 个答案:

答案 0 :(得分:0)

也许错误不是在函数中,而是在输入中,因为我刚刚使用了您的代码并且它正在起作用:

def PctMA(df, pct):
    pctName = 'PCT' + str(pct)
    pctDecimal = float(pct/100)
    pctCalulated = pd.Series((df['value'] - (df['value'] * pctDecimal)), name = pctName)
    df = df.join(pctCalulated)

    return df

df = pd.DataFrame({'value': [2476,2476,2486,2536]})
df_1 = PctMA(df, pct)
df_1

enter image description here

最好提供更多细节。

答案 1 :(得分:0)

我以最小的更改执行了您的代码(仅以1%的值进行映射)。下面是我执行的代码,它工作正常。输入的内容有问题。

enter image description here