在熊猫中,我如何将系列/数据框拆分为两个系列/数据框,其中一个系列中的奇数行,不同的偶数行?现在我正在使用
rng = range(0, n, 2)
odd_rows = df.iloc[rng]
这很慢。
在熊猫中,我如何将系列/数据框拆分为两个系列/数据框,其中一个系列中的奇数行,不同的偶数行?现在我正在使用
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))
简单的方法(但我认为范围使这变慢),但无论索引如何都可以工作(例如,不必是数字索引)
In [96]: %timeit df.iloc[range(0,len(df),2)]
10 loops, best of 3: 21.2 ms per loop
以下需要一个Int64Index
基于范围的(很容易获得,只是reset_index()
)。
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
确保给它索引位置
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;这仅适用于单个 dtype
In [118]: %timeit DataFrame(df.values[::2],index=df.index[::2])
10000 loops, best of 3: 63.5 us per loop