【问题标题】:Get row values of different Ids in a dataframe获取数据框中不同 Id 的行值
【发布时间】:2018-03-29 10:19:25
【问题描述】:

我对 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)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我建议使用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
    

    【讨论】:

      【解决方案2】:

      用途:

      ids = {'Id1':1, 'Id2':2, 'Id3':17}
      df = df.groupby('Ids', group_keys=False).apply(lambda x: x.head(ids[x.name]))
      print (df)
         Ids          Time
      0  Id1  01:22:52.134
      1  Id2  03:21:31.123
      2  Id2  06:52:48.184
      3  Id3  23:12:31.216
      4  Id3  12:52:46.188
      5  Id3  06:52:46.184
      6  Id3  14:59:12.177
      

      解释

      1. 首先为映射创建字典
      2. 最后一个 groupby 和每个过滤组使用 head 并按字典映射值

      【讨论】:

      • 我不知道你是否理解我的问题,但这是我的尝试。 def extractfeatures(sh): vals = sh.row_values for r in range(sh.nrows): while vals(r,0)[1] in TimeList: if vals(r,0)[0] == 'id1': col1 = vals(r,0)[3] if vals(r,0)[0] == 'id2': col2 = [vals(r,0)[3], vals(r,0)[4]] if vals(r,0)[0] =='': col3 = [vals(r,0)[i] for i in range (3,19)] data= [col1, col2, col3] return data
      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      相关资源
      最近更新 更多