获取组熊猫开始和结束的位置的索引

时间:2018-07-11 14:08:36

标签: python pandas date indexing grouping

我按月将数据分组。现在,我需要知道我的小组在哪个观察/索引处开始和结束。 我得到的是以下输出,其中第二列表示每个月的观察次数:

date
01       145
02      2232
03     12785
04     16720
Name: date, dtype: int64

使用以下代码:

leave.groupby([leave['date'].dt.strftime('%m')])['date'].count()

我想要的是一个以后可以访问的索引范围。这样的方式(格式并不重要,我不介意是否返回列表或数据框)

date
01       0 - 145
02      146 - 2378
03     2378 - 15163
04     15164 - 31884

2 个答案:

答案 0 :(得分:1)

尝试以下操作-使用shift

df['data'] = df['data'].shift(1).add(1).fillna(0).apply(int).apply(str) + ' - ' + df['data'].apply(str)

输出:

     data
date    
1    0 - 145
2    146 - 2232
3    2233 - 12785
4    12786 - 16720
5    16721 - 30386
6    30387 - 120157

答案 1 :(得分:0)

我认为您正在要求一个数据框,其中包含每个值的首次出现和最后出现的索引。

这样的事情怎么样。

示例数据(注意-最好在您的问题中包含可重复的数据,这样我就不必猜测了):

import pandas as pd
import numpy as np

np.random.seed(123)
n = 500
df = pd.DataFrame(
        {'date':pd.to_datetime(
                  pd.DataFrame( { 'year':  np.random.choice(range(2017,2019), size=n),
                                  'month': np.random.choice(range(1,13),      size=n),
                                  'day':   np.random.choice(range(1,28),      size=n)
                                 } )
         ) }  
    )

方法:

pd.DataFrame( ( { '_month_':x,'firstIndex':y[0],'lastIndex':y[-1]} 
                for x, y in df.index.groupby(df['date'].dt.month).items() 
               )
             )

结果:

    _month_  firstIndex  lastIndex
0         1           0        495
1         2          21        499
2         3           1        488
3         4           5        498
4         5          14        492
5         6          12        470
6         7          15        489
7         8           2        494
8         9          18        475
9        10           3        491
10       11          10        473
11       12           7        497

如果只打算使用它在循环中建立索引,则不必将其包装在pd.DataFrame()中–您可以将其保留为生成器。

相关问题