创建Pandas数据透视表时存储所有值

时间:2017-06-18 13:52:05

标签: python pandas pivot-table

基本上,我将三个指数的价格汇总来确定:mean,std,以及上限/下限。到现在为止还挺好。但是,现在我还想找到最低的识别价格,它仍然是> =计算出的下限。

我的第一个想法是使用np.min来找到最低价格 - >这显然忽略了下限并且无用。现在我正在尝试存储数据透视表标识的所有值,以找到仍然是> = =下限的价格。有任何想法吗?

pivot = pd.pivot_table(temp, index=['A','B','C'],values=['price'], aggfunc=[np.mean,np.std],fill_value=0)

pivot['lower_limit'] = pivot['mean'] - 2 * pivot['std']
pivot['upper_limit'] = pivot['mean'] + 2 * pivot['std']

1 个答案:

答案 0 :(得分:1)

首先,将pivoted[lower_limit]合并回temp。因此,对于price中的每个temp,还有一个lower_limit值。

temp = pd.merge(temp, pivoted['lower_limit'].reset_index(), on=ABC)

然后,您可以将注意力限制在tempprice = lower_limit的{​​{1}}中的那些行:

temp.loc[temp['price'] >= temp['lower_limit']]

通过计算groupby/min

可以找到所需的结果
result = temp.loc[temp['price'] >= temp['lower_limit']].groupby(ABC)['price'].min()

例如,

import numpy as np
import pandas as pd

np.random.seed(2017)
N = 1000
ABC = list('ABC')
temp = pd.DataFrame(np.random.randint(2, size=(N,3)), columns=ABC)
temp['price'] = np.random.random(N)
pivoted = pd.pivot_table(temp, index=['A','B','C'],values=['price'], 
                         aggfunc=[np.mean,np.std],fill_value=0)
pivoted['lower_limit'] = pivoted['mean'] - 2 * pivoted['std']
pivoted['upper_limit'] = pivoted['mean'] + 2 * pivoted['std']

temp = pd.merge(temp, pivoted['lower_limit'].reset_index(), on=ABC)
result = temp.loc[temp['price'] >= temp['lower_limit']].groupby(ABC)['price'].min()
print(result)

产量

A  B  C
0  0  0    0.003628
      1    0.000132
   1  0    0.005833
      1    0.000159
1  0  0    0.006203
      1    0.000536
   1  0    0.001745
      1    0.025713