代码之家  ›  专栏  ›  技术社区  ›  nilsinelabore

如何按2个变量排序/分组并按1个变量选择以创建数据帧

  •  0
  • nilsinelabore  · 技术社区  · 5 年前

    我想把数据分类 Timestamp 首先,然后 group_Id . 从那里,我想选择所有相应的数据 时间戳 18年1月1日至18年7月1日,并将其保存为名为 df1 所以我可以把它加载到机器学习模型中。

    我的数据是这样的。

    Id      Timestamp       Data  group_Id
    5999    1/1/18 0:00     25.5    101
    6000    1/1/18 0:00     25      101
    6001    1/1/18 0:00     27      52
    6002    1/1/18 0:00     26.5    52
    6003    1/1/18 0:00     25.5    50
    6004    1/1/18 0:00     25      50
    6005    1/1/18 0:00     37      14
    6006    1/1/18 0:00     36.5    14
    6007    1/1/18 0:00     30.5    85
    6008    1/1/18 0:00     30      85
    ...          ...        ...     ..
    

    请告诉我怎么做。我需要导出数据帧吗 df1型 从科拉布来的?谢谢您。

    在回复@MyNameIsCaleb answer时,我运行了可复制的数据并获得了以下结果,但有两个问题: 1)组Id未排序 2)行数减少(对不起,我想我不清楚我的目的。我想对数据进行排序并提取特定时间段(如2018/08/08-2018/08/14)中的10天数据,并将其作为一个新的数据帧,所有行都在日期之间。

         Id  Timestamp  Data  group_Id
    3  6002 2019-02-01  26.5        52
    4  6003 2019-03-01  25.5        50
    1  6000 2019-04-01  25.0       101
    5  6004 2019-05-01  25.0        50
    6  6005 2019-06-01  37.0        14
    7  6006 2019-07-01  36.5        14
    

    对于实际数据,它会给出一个错误:

    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-63-e7bd6eb249eb> in <module>()
          2 day1 = datetime.strptime('2018-08-13', '%Y-%m-%d')
          3 day2 = datetime.strptime('2018-08-19', '%Y-%m-%d')
    ----> 4 df1 = df.loc[df['Timestamp'].between(day1, day2)].sort_values(by=['Timestamp', 'group_Id'])
    
    2 frames
    /usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in _get_label_or_level_values(self, key, axis)
       1704             values = self.axes[axis].get_level_values(key)._values
       1705         else:
    -> 1706             raise KeyError(key)
       1707 
       1708         # Check for duplicates
    
    KeyError: 'group_Id'
    

    我不知道出了什么问题。谢谢。

    0 回复  |  直到 5 年前
        1
  •  0
  •   MyNameIsCaleb    5 年前

    你可以用

    df2 = df.loc[df['Timestamp'].between(date1, date2)].sort_values(by=['Timestamp', 'group_Id'])
    

    .between 如果已命名,则必须使用datetime对象才能正确处理datetime列。 sort_values 可以同时执行多个列。

    如果不打算继续使用 df 也需要整理一下,在这种情况下,把它放在 数据框 .

    import pandas as pd
    from datetime import datetime
    
    df = pd.DataFrame({
        'Id': [5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008],
        'Timestamp': ['8/1/19 00:00', '4/1/19 00:00', '1/1/19 00:00', '2/1/19 00:00', '3/1/19 00:00', '5/1/19 00:00', '6/1/19 00:00', '7/1/19 00:00', '9/1/19 00:00', '10/1/19 00:00'],
        'Data': [25.5, 25, 27, 26.5, 25.5, 25, 37, 36.5, 30.5, 30],
        'group_Id': [101, 101, 52, 52, 50, 50, 14, 14, 85, 85]
    })
    
    df['Timestamp'] = pd.to_datetime(df['Timestamp'], format='%m/%d/%y %H:%M')
    
    date1 = datetime.strptime('2019-01-31', '%Y-%m-%d')
    date2 = datetime.strptime('2019-07-31', '%Y-%m-%d')
    
    df2 = df.loc[df['Timestamp'].between(date1, date2)].sort_values(by=['Timestamp', 'group_Id'])