Python 按GroupBy内容筛选数据帧

Python 按GroupBy内容筛选数据帧,python,pandas,dataframe,scipy,Python,Pandas,Dataframe,Scipy,考虑以下数据帧: records = [{'item': 'Widget A', 'quantity': 50, 'revenue': 25.0, 'trandate': '2016-3-24'}, {'item': 'Widget B', 'quantity': 6, 'revenue': 72.0, 'trandate': '2016-3-28'}, {'item': 'Widget C', 'quantity': 5, 'revenue': 75.0

考虑以下数据帧:

    records = [{'item': 'Widget A', 'quantity': 50, 'revenue': 25.0, 'trandate': '2016-3-24'},
        {'item': 'Widget B', 'quantity': 6, 'revenue': 72.0, 'trandate': '2016-3-28'},
        {'item': 'Widget C', 'quantity': 5, 'revenue': 75.0, 'trandate': '2016-3-28'},
        {'item': 'Widget A', 'quantity': 168, 'revenue': 84.0, 'trandate': '2016-3-29'},
        {'item': 'Widget B', 'quantity': 6, 'revenue': 84.0, 'trandate': '2016-3-29'}]
    indices = [487, 488, 493, 495, 497]
    df = pd.DataFrame(records, index=indices)
屈服

    id  item       quantity  revenue   trandate
    487  Widget A        50     25.0  2016-3-24
    488  Widget B         6     72.0  2016-3-28
    493  Widget C         6     75.0  2016-3-28
    495  Widget A         6     84.0  2016-3-29
    497  Widget B         6     84.0  2016-3-29
我需要将此数据帧拆分为两个互补集:

  • 包含每个
    项的第一个事务的数据帧

    id  item       quantity  revenue   trandate
    487  Widget A        50     25.0  2016-3-24
    488  Widget B         6     72.0  2016-3-28
    493  Widget C         6     75.0  2016-3-28
    
     id  item       quantity  revenue   trandate
    495  Widget A         6     84.0  2016-3-29
    497  Widget B         6     84.0  2016-3-29
    
  • 排除每个
    项的第一个事务的数据帧

    id  item       quantity  revenue   trandate
    487  Widget A        50     25.0  2016-3-24
    488  Widget B         6     72.0  2016-3-28
    493  Widget C         6     75.0  2016-3-28
    
     id  item       quantity  revenue   trandate
    495  Widget A         6     84.0  2016-3-29
    497  Widget B         6     84.0  2016-3-29
    
  • 我想按GroupedBy对象过滤
    df
    ,但我无法在我按groupby后显示
    df
    的索引:

        gb = df.groupby('item')
        >>> gb.groups
        # {'Widget A': [487, 495], 'Widget B': [488, 497], 'Widget C': [493]}
        >>> gb['trandate'].min()
        item
        Widget A    2016-3-24
        Widget B    2016-3-28
        Widget C    2016-3-28
    
    我可以使用GroupBy生成如下数据帧:

        id   item
        487  Widget A    2016-3-24
        488  Widget B    2016-3-28
        493  Widget C    2016-3-28
    

    我认为您需要通过以下人员创建的
    mask
    筛选: