gpt4 book ai didi

python - 使用 pandas.DataFrame.resample 的最常见值

转载 作者:太空狗 更新时间:2023-10-30 02:57:37 25 4
gpt4 key购买 nike

我正在使用 pandas.DataFrame.resample 对具有时间戳索引的分组 Pandas dataframe 进行重采样。

在其中一列中,我想重新采样以便选择最频繁的值。目前,我只成功地使用了 NumPy 函数,例如 np.maxnp.sum

#generate test dataframe
data = np.random.randint(0,10,(366,2))
index = pd.date_range(start=pd.Timestamp('1-Dec-2012'), periods=366, unit='D')
test = pd.DataFrame(data, index=index)

#generate group array
group = np.random.randint(0,2,(366,))

#define how dictionary for resample
how_dict = {0: np.max, 1: np.min}

#perform grouping and resample
test.groupby(group).resample('48 h',how=how_dict)

前面的代码之所以有效,是因为我使用了 NumPy 函数。但是,如果我想按最频繁的值使用重采样,我不确定。我尝试定义一个自定义函数,如

def frequent(x):
(value, counts) = np.unique(x, return_counts=True)
return value[counts.argmax()]

但是,如果我现在这样做:

how_dict = {0: np.max, 1: frequent}

我得到一个空数据框...

df = test.groupby(group).resample('48 h',how=how_dict)
df.shape

最佳答案

您的重采样周期太短,因此当一个组在某个周期为空时,您的用户函数会引发一个 ValueError 不会被 pandas 友好地捕获。

但它可以在没有空组的情况下工作,例如常规组:

In [8]: test.groupby(arange(366)%2).resample('48h',how=how_dict).head()
Out[8]:
0 1
0 2012-12-01 4 8
2012-12-03 0 3
2012-12-05 9 5
2012-12-07 3 4
2012-12-09 7 3

或者更大的周期:

In [9]: test.groupby(group).resample('122D',how=how_dict)
Out[9]:
0 1
0 2012-12-02 9 0
2013-04-03 9 0
2013-08-03 9 6
1 2012-12-01 9 3
2013-04-02 9 7
2013-08-02 9 1

编辑

解决方法是管理空案例:

def frequent(x):
if len(x)==0 : return -1
(value, counts) = np.unique(x, return_counts=True)
return value[counts.argmax()]

为了

In [11]: test.groupby(group).resample('48h',how=how_dict).head()
Out[11]:
0 1
0 2012-12-01 5 3
2012-12-03 3 4
2012-12-05 NaN -1
2012-12-07 5 0
2012-12-09 1 4

关于python - 使用 pandas.DataFrame.resample 的最常见值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36459132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com