【问题标题】:Multi-slice pandas dataframe多片熊猫数据框
【发布时间】:2021-10-05 00:40:09
【问题描述】:

我有一个数据框:

import pandas as pd

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

我想分割成两个新的数据帧,这样第一个包含每个 nth 值,而第二个包含不在第一个中的剩余值。

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

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

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

但我想知道的是:

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

【问题讨论】:

    标签: python pandas dataframe slice


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 1970-01-01
      • 2018-07-28
      • 2017-03-10
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多