Pandas - 根据百分比获取前 n 行
Pandas - get first n-rows based on percentage
我有一个数据框,我想弹出一定数量的记录,而不是我想作为百分比值传递的数字。
例如,
df.head(n=10)
从数据集中弹出前10条记录。我想要一个小的更改而不是 10 条记录 我想从我的数据集中弹出 first 5% 的记录。
如何在 pandas.
中执行此操作
我正在寻找这样的代码,
df.head(frac=0.05)
有什么简单的方法可以得到这个吗?
I want to pop first 5% of record
没有内置方法,但您可以这样做:
您可以 multiply
总行数到您的百分比,并将结果用作 head
方法的参数。
n = 5
df.head(int(len(df)*(n/100)))
因此,如果您的数据框包含 1000
行和 n = 5%
行,您将获得前 50
行。
我已经扩展了 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):]
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
这可能会有所帮助:
tt = tmp.groupby('id').apply(lambda x: x.head(int(len(x)*0.05))).reset_index(drop=True)
我有一个数据框,我想弹出一定数量的记录,而不是我想作为百分比值传递的数字。
例如,
df.head(n=10)
从数据集中弹出前10条记录。我想要一个小的更改而不是 10 条记录 我想从我的数据集中弹出 first 5% 的记录。 如何在 pandas.
中执行此操作我正在寻找这样的代码,
df.head(frac=0.05)
有什么简单的方法可以得到这个吗?
I want to pop first 5% of record
没有内置方法,但您可以这样做:
您可以 multiply
总行数到您的百分比,并将结果用作 head
方法的参数。
n = 5
df.head(int(len(df)*(n/100)))
因此,如果您的数据框包含 1000
行和 n = 5%
行,您将获得前 50
行。
我已经扩展了 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):]
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
这可能会有所帮助:
tt = tmp.groupby('id').apply(lambda x: x.head(int(len(x)*0.05))).reset_index(drop=True)