计算pandas数据帧的百分位数并将二进制值分配给新列

时间:2016-06-10 14:46:28

标签: python pandas dataframe

使用一列想象的“温度”数据获取数据框:

import pandas as pd
import numpy as np

dates = pd.date_range('20070101',periods=3200)
df = pd.DataFrame(data=np.random.randint(0,100,(3200,1)), columns =list('A'))
df['date'] = dates
df = df[['date','A']]

我想为所有行分配低于第10个百分位数和高于第90个百分位数的值,分别为-1和1(其他全部为0)。

这是尝试这样做的功能:

temp = []
def quantilecalc(x):
    for season in df:
        if season > df.quantile(.9):
            temp.append(1)
        if season < df.quantile(.1):
            temp.append(-1)
        else:
            temp.append(0)

当我应用此quantilecalc(df)时,我收到以下错误:

File "C:\\\\lib\site-packages\pandas\core\ops.py", line 682, in na_op
raise TypeError("invalid type comparison")

TypeError: invalid type comparison

我已尝试将其应用于数据框quantilecalc(df['A'])的特定列,但这会产生相同的错误。非常感谢一些专业知识......

1 个答案:

答案 0 :(得分:3)

@EdChum提供了这个答案:

创建一个新列df['temp'] = ""并应用此列:

df.loc[df['A'] > df['A'].quantile(0.9), 'temp'] = 1
df.loc[df['A'] < df['A'].quantile(0.1), 'temp'] = -1

谢谢!