我对xlsx文件中的某些ID进行了过滤。将它们转换为数据框。
ID总数为3。
其中,Id1(在xlsx文件中)具有5个行值
      id2具有3个行值
      ID3具有19行值

第一步,我仅提取了每个ID的行值(在我的情况下,行值是时间,以%H:%M:%S.%f表示,并且每个ID都是唯一的)。

我的数据框看起来是这样的:

import pandas as pd
df = pd.DataFrame([['Id1','01:22:52.134'],['Id2','03:21:31.123'],  ['Id1','21:12:52.544'],['Id3','23:12:31.216'],['Id1','10:22:02.134'],['Id2','06:52:48.184'], ['Id3','12:52:46.188'], ['Id3','06:52:46.184'], ['Id1','13:33:46.235'], ['Id2','14:35:12.235'], ['Id3','14:59:12.177']], columns=["Ids",'Time'])


我的要求是:
我要提取所选ID的行值,但不是所有行值。
例如:-Id1的1行值(最初包含5)
      -Id2的2个行值(最初包含3个)
      -Id3的17个行值(最初包含19个)

最佳答案

我建议使用groupby + pd.concat进行此操作。首先,您需要一个映射:

mapping = {'Id1' : 1, 'Id2' : 2, 'Id3' : 17}


现在,使用mapping通过GroupBy.head仅获取所需的行数:

pd.concat(
    [g.head(mapping[k]) for k, g in df.groupby('Ids')], axis=0
)

    Ids          Time
0   Id1  01:22:52.134
1   Id2  03:21:31.123
5   Id2  06:52:48.184
3   Id3  23:12:31.216
6   Id3  12:52:46.188
7   Id3  06:52:46.184
10  Id3  14:59:12.177

10-06 01:56