Splitting pandas dataframe into many chunks

前端 未结 2 1458
天命终不由人
天命终不由人 2021-01-07 05:18

Let\'s say I have a dataframe with the following structure:

    observation
d1  1
d2  1
d3  -1
d4  -1
d5  -1
d6  -1
d7  1
d8  1
d9  1
d10 1
d11 -1
d12 -1
d13         


        
2条回答
  •  时光取名叫无心
    2021-01-07 05:44

    Here's an example using real date.datetime objects as indices.

    import pandas as pd
    import numpy as np
    import datetime
    import random
    
    df = pd.DataFrame({'x': np.random.randn(40)}, index = [date.fromordinal(random.randint(start_date, end_date)) for i in range(40)])
    
    def filter_on_datetime(df, year = None, month = None, day = None):
        if all(d is not None for d in {year, month, day}):
            idxs = [idx for idx in df.index if idx.year == year and idx.month == month and idx.day == day]
        elif year is not None and month is not None and day is None:
            idxs = [idx for idx in df.index if idx.year == year and idx.month == month]
        elif year is not None and month is None and day is None:
            idxs = [idx for idx in df.index if idx.year == year]
        elif year is None and month is not None and day is not None:
            idxs = [idx for idx in df.index if idx.month == month and idx.day == day]
        elif year is None and month is None and day is not None:
            idxs = [idx for idx in df.index if idx.day == day]
        elif year is None and month is not None and day is None:
            idxs = [idx for idx in df.index if idx.month == month]
        elif year is not None and month is None and day is not None:
            idxs = [idx for idx in df.index if idx.year == year and idx.day == day] 
        else:
            idxs = df.index
        return df.ix[idxs]
    

    Running this:

    >>> print(filter_on_datetime(df = df, year = 2016, month = 2))
                       x
    2016-02-01 -0.141557
    2016-02-03  0.162429
    2016-02-05  0.703794
    2016-02-07 -0.184492
    2016-02-09 -0.921793
    2016-02-12  1.593838
    2016-02-17  2.784899
    2016-02-19  0.034721
    2016-02-26 -0.142299
    

提交回复
热议问题