熊猫 - 根据百分比得到第一个n行

时间:2018-05-04 10:54:33

标签: python pandas percentage

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

例如,

df.head(n=10)

从数据集中弹出前10条记录。我想要一个小的更改,而不是10个记录,我想从我的数据集中弹出第一个 5%的记录。 如何在熊猫中做到这一点。

我正在寻找像这样的代码,

df.head(frac=0.05)

有没有简单的方法来获得这个?

4 个答案:

答案 0 :(得分:6)

  

我想弹出前5%的记录

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

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

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

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

答案 1 :(得分:0)

我已经扩展了Mihai对于我的用法的答案,这可能对那里的人们有用。 目的是自动选择top-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):]

答案 2 :(得分:0)

也许这会有所帮助:

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

答案 3 :(得分:-1)

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
相关问题