【问题标题】:Pandas - get first n-rows based on percentagePandas - 根据百分比获取前 n 行
【发布时间】:2018-10-14 20:15:51
【问题描述】:

我有一个数据框,我想弹出一定数量的记录,而不是我想作为百分比值传递的数字。

例如,

df.head(n=10)

从数据集中弹出前 10 条记录。我想从我的数据集中弹出 first 5% 的记录,而不是 10 条记录。 如何在 pandas 中做到这一点。

我正在寻找这样的代码,

df.head(frac=0.05)

有什么简单的方法可以得到这个吗?

【问题讨论】:

  • 您在寻找df.sample(frac=*)
  • @shivsn- 不,我不需要样品。我想要前 n% 行。但我想要 df.sample 与 df.head 类似的时尚

标签: python pandas percentage


【解决方案1】:

我想弹出前 5% 的记录

没有内置方法,但您可以这样做:

您可以multiply 将总行数计算为您的百分比并将结果用作head 方法的参数。

n = 5
df.head(int(len(df)*(n/100)))

因此,如果您的数据框包含1000 行和n = 5%,您将获得第一个50 行。

【讨论】:

  • 我知道这种提取方式。但我想知道是否没有任何可用的内置功能。
【解决方案2】:

我已经扩展了 Mihai 的答案以供我使用,它可能对那里的人有用。 目的是为时间序列采样自动选择前 n 条记录,因此您可以确定您正在使用旧记录进行训练和最近的记录进行测试。

# having 
# import pandas as pd 
# df = pd.DataFrame... 

def sample_first_prows(data, perc=0.7):
    import pandas as pd
    return data.head(int(len(data)*(perc)))

train = sample_first_prows(df)
test = df.iloc[max(train.index):]

【讨论】:

    【解决方案3】:
    df=pd.DataFrame(np.random.randn(10,2))
    print(df)
    
              0         1
    0  0.375727 -1.297127
    1 -0.676528  0.301175
    2 -2.236334  0.154765
    3 -0.127439  0.415495
    4  1.399427 -1.244539
    5 -0.884309 -0.108502
    6 -0.884931  2.089305
    7  0.075599  0.404521
    8  1.836577 -0.762597
    9  0.294883  0.540444
    

    #70% 的数据帧

    part_70=df.sample(frac=0.7,random_state=10)
    print(part_70)
    
              0         1
    8  1.836577 -0.762597
    2 -2.236334  0.154765
    5 -0.884309 -0.108502
    6 -0.884931  2.089305
    3 -0.127439  0.415495
    1 -0.676528  0.301175
    0  0.375727 -1.297127
    

    【讨论】:

    • 感谢您的回复,但我的要求是获得最高 n% 的记录。示例返回随机顺序行。
    【解决方案4】:

    这可能会有所帮助:

    tt  = tmp.groupby('id').apply(lambda x: x.head(int(len(x)*0.05))).reset_index(drop=True)
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多