我有一个数据帧我想要弹出一定数量的记录,而不是我希望作为百分比值传递的数字。
例如,
df.head(n=10)
从数据集中弹出前10条记录。我想要一个小的更改,而不是10个记录,我想从我的数据集中弹出第一个 5%的记录。 如何在熊猫中做到这一点。
我正在寻找像这样的代码,
df.head(frac=0.05)
有没有简单的方法来获得这个?
答案 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