繁体   English   中英

如何在pandas数据帧中对数据集进行子集化?

[英]How to subset a dataset in pandas dataframe?

我有一个数据框,其中有超过1000万个原始数据由大约30列组成。

第一列是ID

ID   C
1    1
1    2
1    3
1    2
1    3
2    1
2    5
2    9
2    0
2    1

我想只提取每个ID的前四行(它们是最新的输入,因为它已经排序)

我目前正在使用下面的代码,但遗憾的是它速度很慢,因为处理大约5%的数据需要大约两个小时,处理整个数据可能需要一天左右的时间。

df1 = pd.DataFrame() # an empty dataframe
for i in df.ID:   # df is the dataframe which contains the data
    df2 = df[df["ID"]== i] 
    df2 = df2[0:4] # take the first four rows
    df_f = df1.append(df2) 

是否有一种有效的方法可以在更短的时间内完成同样的事情。

你需要head()方法:

df.groupby("ID").head(4)

在此输入图像描述

这是原始代码的修订版本,对groupby().head()进行运行时测试groupby().head()方法:

def loop():
    df1 = pd.DataFrame() # an empty dataframe
    for i in df.ID.drop_duplicates():   # df is the dataframe which contains the data
        df2 = df[df["ID"]== i] 
        df2 = df2[0:4] # take the first four rows
        df1 = pd.concat([df1, df2])
    return df1

%timeit loop()
# 100 loops, best of 3: 1.99 ms per loop

%timeit df.groupby("ID").head(4)
# 1000 loops, best of 3: 485 µs per loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM