加快熊猫群体的差异化

阿梅里奥·巴斯克斯·雷纳

考虑以下解决方案,以在Pandas中计算组内差异:

df =  df.set_index(['ticker', 'date']).sort_index()[['value']]
df['diff'] = np.nan
idx = pd.IndexSlice

for ix in df.index.levels[0]:
    df.loc[ idx[ix,:], 'diff'] = df.loc[idx[ix,:], 'value' ].diff()

为了:

> df
   date ticker  value
0    63      C   1.65
1    88      C  -1.93
2    22      C  -1.29
3    76      A  -0.79
4    72      B  -1.24
5    34      A  -0.23
6    92      B   2.43
7    22      A   0.55
8    32      A  -2.50
9    59      B  -1.01

它返回:

> df
             value  diff
ticker date             
A      22     0.55   NaN
       32    -2.50 -3.05
       34    -0.23  2.27
       76    -0.79 -0.56
B      59    -1.01   NaN
       72    -1.24 -0.23
       92     2.43  3.67
C      22    -1.29   NaN
       63     1.65  2.94
       88    -1.93 -3.58

该解决方案不适用于大型数据帧。具有shape的数据框需要几分钟的时间(405344,2)大概是这种情况,因为我要遍历主循环中第一级的每个值。

有什么办法可以加快熊猫的速度吗?遍历索引值是解决此问题的好方法吗?可以numba或许被用于此?

安迪·海登(Andy Hayden)

这是另一种方法,应该更快一些。

首先,根据代码和日期排序:

In [11]: df = df.set_index(['ticker', 'date']).sort_index()

In [12]: df
Out[12]:
             value
ticker date
A      22     0.55
       32    -2.50
       34    -0.23
       76    -0.79
B      59    -1.01
       72    -1.24
       92     2.43
C      22    -1.29
       63     1.65
       88    -1.93

添加diff列:

In [13]: df['diff'] = df['value'].diff()

要填写NaN,我们可以找到第一行,如下所示(可能会有更好的方法):

In [14]: s = pd.Series(df.index.labels[0])

In [15]: s != s.shift()
Out[15]:
0     True
1    False
2    False
3    False
4     True
5    False
6    False
7     True
8    False
9    False
dtype: bool

In [16]: df.loc[(s != s.shift()).values 'diff'] = np.nan

In [17]: df
Out[17]:
             value  diff
ticker date
A      22     0.55   NaN
       32    -2.50 -3.05
       34    -0.23  2.27
       76    -0.79 -0.56
B      59    -1.01   NaN
       72    -1.24 -0.23
       92     2.43  3.67
C      22    -1.29   NaN
       63     1.65  2.94
       88    -1.93 -3.58

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

加快熊猫群体的差异化

来自分类Dev

NASM本地标签差异化

来自分类Dev

Twilio 视频轨道差异化

来自分类Dev

如何通过自动差异化获得更多性能?

来自分类Dev

如何在github上进行评论差异化?

来自分类Dev

如何看Zygote差异化功能的实现?

来自分类Dev

Python 数据抓取差异化 - 数百万与数

来自分类Dev

CSS样式对html元素的差异化应用

来自分类Dev

如何使用差异工具在包含库和源的目录之间进行差异化?

来自分类Dev

如何将文件命名为差异化的VCL和FireMonkey代码

来自分类Dev

差异化CUDA核心(NVIDIA)和流处理器(ATI / AMD)

来自分类Dev

Matroska有什么WebM没有的,这使得差异化成为必要?

来自分类Dev

熊猫定制的群体聚集

来自分类Dev

熊猫选择特定的群体

来自分类Dev

熊猫中的置换群体

来自分类Dev

对熊猫的各个群体进行平均

来自分类Dev

熊猫“部分融化”或“群体融化”

来自分类Dev

发现群体差异之间的重要价值

来自分类常见问题

加快熊猫迭代

来自分类Dev

加快熊猫过滤

来自分类Dev

加快熊猫的复杂功能

来自分类Dev

加快熊猫滚动窗口

来自分类Dev

熊猫groupby申请如何加快

来自分类Dev

加快熊猫稀疏DataFrame的加载

来自分类Dev

如何加快熊猫to_sql

来自分类Dev

如何在熊猫groupby中转移整个群体

来自分类Dev

如何用cython(或numpy)加快熊猫速度

来自分类Dev

如何加快熊猫read_csv的速度?

来自分类Dev

加快熊猫多级索引选择的方法?