Pandas 基于整数索引的数据帧分割

Pandas 基于整数索引的数据帧分割,pandas,Pandas,在pandas中,如何将序列/数据帧拆分为两个序列/数据帧,其中一个序列中的奇数行,不同序列中的偶数行?现在我正在使用 rng = range(0, n, 2) odd_rows = df.iloc[rng] 这相当慢。使用切片: 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

在pandas中,如何将序列/数据帧拆分为两个序列/数据帧,其中一个序列中的奇数行,不同序列中的偶数行?现在我正在使用

rng = range(0, n, 2)
odd_rows = df.iloc[rng]
这相当慢。

使用切片:

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

这里有一些比较

In [100]: df = DataFrame(randn(100000,10))
简单的方法(但我认为range会使速度变慢),但不管索引如何,它都会起作用 (例如,不必是数字索引)

下面需要一个基于范围的
Int64Index
(很容易获得,只需
reset\u index()

确保为其提供索引位置

In [98]: %timeit df.take(df.index % 2)
100 loops, best of 3: 3.06 ms per loop
与上面相同,但在负数标记上没有转换

In [99]: %timeit df.take(df.index % 2,convert=False)
100 loops, best of 3: 2.44 ms per loop
这个获胜者是@AndyHayden soln;这仅适用于单个数据类型

In [118]: %timeit DataFrame(df.values[::2],index=df.index[::2])
10000 loops, best of 3: 63.5 us per loop

超晚但解释:切片语法。开始(不做任何事情):停止(不做任何事情):步骤计数(2)。所以对于偶数,从0开始,到结束,递增2。对于赔率,从1开始,到结束,增加2。
In [99]: %timeit df.take(df.index % 2,convert=False)
100 loops, best of 3: 2.44 ms per loop
In [118]: %timeit DataFrame(df.values[::2],index=df.index[::2])
10000 loops, best of 3: 63.5 us per loop