我按月将数据分组。现在,我需要知道我的小组在哪个观察/索引处开始和结束。 我得到的是以下输出,其中第二列表示每个月的观察次数:
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
答案 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()
中–您可以将其保留为生成器。