gpt4 book ai didi

python - 基于所有列扩展窗口的Pandas qcut

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:24 25 4
gpt4 key购买 nike

假设我有一个数据框:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.normal(0,1,[100,50]))

看起来像:

         0         1         2         3         4         5         6   \
0 -0.141305 2.158252 1.006520 -1.004185 -0.213160 0.648904 -0.089369
1 -1.373167 -1.100959 1.007023 0.699591 -1.667834 1.422182 0.940912
2 -0.212014 1.967436 0.401133 -0.996298 -1.696490 -0.857453 -0.686584
3 -0.351902 0.413816 -0.494869 0.448740 0.146897 -0.798095 -0.546489
4 0.416376 -0.689577 -0.967050 -1.667480 1.223966 -1.382113 -0.812368

7 8 9 ... 40 41 42 \
0 0.282299 0.627085 1.111637 ... 1.354044 0.335316 -1.817465
1 -0.540302 -1.276811 -0.077210 ... 0.556072 0.642445 0.313477
2 0.601571 -0.989826 0.942893 ... 0.803984 0.286897 -0.507413
3 -0.277153 -1.068749 1.720561 ... 0.317774 0.744266 -1.671273
4 0.391501 0.703358 0.972910 ... -0.251225 -0.918734 0.226089

43 44 45 46 47 48 49
0 -2.088606 -1.297459 -1.135577 -0.579162 -0.538286 1.223049 -0.577341
1 2.307270 0.381122 0.970177 0.011552 -0.704012 -1.759955 0.649379
2 0.139226 1.287651 0.335977 0.832819 -0.701925 1.656187 0.218177
3 0.621638 -2.893360 -1.349287 2.160106 0.977205 -0.550635 -0.473224
4 -0.646419 2.197215 -0.483294 -1.141479 0.706850 2.686787 0.054517

以下代码可以满足我的需要,但效率非常低:

lbound_ = float(pd.DataFrame(np.ravel(df.iloc[0:10,:].values)).quantile(0.))
ubound_ = float(pd.DataFrame(np.ravel(df.iloc[0:10,:].values)).quantile(0.1))
df[(df>=lbound_) & (df<ubound_)]

我想根据在任何列中观察到的任何数据,在每个时间点对我的数据进行十分位数/分位数存储。

以上仅针对第一个存储桶[0,.1)执行0:10

一个非常缓慢的实现看起来像:

def get_quantile(df,q):
return np.percentile(df.ravel(),q)

df.expanding().apply(get_quantile,args=(.1,))

我如何概括这一点并有效地完成它?

这里有点难住,希望得到指导。

谢谢

最佳答案

对于任何偶然发现这个问题的人,以下是我的回答。可能有更快的解决方案,所以如果您有更好的想法,请发布。

谢谢

def standardize_block(df_standardize_arg):
df_standardize_arg = df_standardize_arg.copy()
ix_ = df_standardize_arg.index
prior_data = np.array([])
output = []
for i in range(0, len(ix_)):
data = np.array(df_standardize_arg.loc[ix_[i]].values.ravel())
data = data[~np.isnan(data)]
prior_data = np.concatenate((prior_data, data), axis=0)

#this date piece may be specific to my use case.

output.append({'date': ix_[i],
'mean': prior_data.mean(),
'std': prior_data.std()})

df_output = pd.DataFrame(output)
del df_standardize_arg #my data is quite large, so I delete it here.
df_output.index = df_output['date']
del df_output['date']
return df_output.copy()

关于python - 基于所有列扩展窗口的Pandas qcut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600059/

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