多切片熊猫数据框

时间:2021-07-29 10:44:49

标签: python pandas dataframe slice

我有一个数据框:

import pandas as pd

df = pd.DataFrame({'val': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']})

我想分成两个新的数据帧,第一个包含每个 nth 值,而第二个包含第一个中没有的剩余值。

例如,在 n=3 的情况下,第二个数据帧将保留原始数据帧中的两个值,跳过一个,保留两个,跳过一个等。此切片在下图,其中原始数据帧值为蓝色,这些值被分为绿色集和红色集:

enter image description here

我使用 ilocisin 的组合成功地实现了这一点:

df1 = df.iloc[::3]
df2 = df[~df.val.isin(df1.val)]

但我想知道的是:

这是实现这一目标的最 Pythonic 的方式吗?从数据框中取出我想要的内容,然后通过检查原始新数据框中没有的内容来获取我想要的其余内容,这似乎效率低下且不是特别优雅。相反,是否有一个 iloc 表达式,如用于生成 df1 的表达式,它可以执行切片过程的第二部分并替换 isin 行?更好的是,是否有一个表达式可以一步执行整个两步切片?

1 个答案:

答案 0 :(得分:1)

使用模 3 与不相等的第一个值进行比较(与切片行相同):

#for default RangeIndex
df2 = df[df.index % 3 != 0]
#for any Index
df2 = df[np.arange(len(df)) %  3 != 0]
print (df2)
  val
1   b
2   c
4   e
5   f
7   h