首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于整数索引拆分数据帧

基于整数索引拆分数据帧
EN

Stack Overflow用户
提问于 2013-07-04 04:15:33
回答 2查看 20.5K关注 0票数 13

在pandas中,如何将Series/dataframe拆分成两个Series /dataframe,其中一个Series中有奇数行,不同Series中有偶数行?现在我正在使用

代码语言:javascript
复制
rng = range(0, n, 2)
odd_rows = df.iloc[rng]

这是相当慢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-04 04:53:22

使用切片:

代码语言:javascript
复制
In [11]: s = pd.Series([1,2,3,4])

In [12]: s.iloc[::2]  # even
Out[12]:
0    1
2    3
dtype: int64

In [13]: s.iloc[1::2]  # odd
Out[13]:
1    2
3    4
dtype: int64
票数 25
EN

Stack Overflow用户

发布于 2013-07-04 04:54:23

下面是一些比较

代码语言:javascript
复制
In [100]: df = DataFrame(randn(100000,10))

简单的方法(但我认为range会使这个过程变慢),但是不管索引是什么都可以工作(例如,不必是数字索引)

代码语言:javascript
复制
In [96]: %timeit df.iloc[range(0,len(df),2)]
10 loops, best of 3: 21.2 ms per loop

下面的代码需要一个基于范围的Int64Index (这很容易获得,只需要reset_index())。

代码语言:javascript
复制
In [107]: %timeit df.iloc[(df.index % 2).astype(bool)]
100 loops, best of 3: 5.67 ms per loop

In [108]: %timeit df.loc[(df.index % 2).astype(bool)]
100 loops, best of 3: 5.48 ms per loop

确保为其提供索引位置

代码语言:javascript
复制
In [98]: %timeit df.take(df.index % 2)
100 loops, best of 3: 3.06 ms per loop

与上面相同,但没有对负索引进行转换

代码语言:javascript
复制
In [99]: %timeit df.take(df.index % 2,convert=False)
100 loops, best of 3: 2.44 ms per loop

这个获胜者是@AndyHayden soln;这只适用于单一的dtype

代码语言:javascript
复制
In [118]: %timeit DataFrame(df.values[::2],index=df.index[::2])
10000 loops, best of 3: 63.5 us per loop
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17457329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档