Python 如何在熊猫中按3列分组,并从日期列中给出的第一个条目开始计算每年的频率

Python 如何在熊猫中按3列分组,并从日期列中给出的第一个条目开始计算每年的频率,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个dataframe,其中有4列 我想按x,y,z列进行分组,并从分组框架中的第一个条目开始计算同一年中这些组合的数量 我有: x y z date 1 2 2 08-12-2016 00:00 1 3 2 24-03-2017 00:00 1 2 2 22-04-2017 00:00 1 2 2 22-04-2019 00:00 我想: x y z level count 1 2 2 1 2 1 3 2 1 1 1 2 2 2 1 B

我有一个dataframe,其中有4列

我想按x,y,z列进行分组,并从分组框架中的第一个条目开始计算同一年中这些组合的数量

我有:

x y z date
1 2 2 08-12-2016 00:00
1 3 2 24-03-2017 00:00
1 2 2 22-04-2017 00:00
1 2 2 22-04-2019 00:00
我想:

x y z  level count
1 2 2  1        2
1 3 2  1        1
1 2 2  2        1
Bin表示这些组合落下的Bin编号,count表示该特定Bin中这些组合的计数


谢谢你

你在找这样的东西吗…使用
重采样

# sample df
s = """x,y,z,date
1,2,2,08-12-2016 00:00
1,3,2,24-03-2017 00:00
1,2,2,22-04-2017 00:00
1,2,2,22-04-2019 00:00"""

df = pd.read_csv(StringIO(s))
df['date'] = pd.to_datetime(df['date'])

# create a count column
df['count'] = 1
# groupby [x,y,z], resample your date by 365 days and count
df2 = df.groupby(['x', 'y', 'z']).apply(lambda g: g.set_index('date').resample('365D')[['count']].count())
# boolean indexing to get rid of zeros
final = df2[df2['count'] != 0]

                  count
x y z date             
1 2 2 2016-08-12      2
      2018-08-12      1
  3 2 2017-03-24      1

你能解释一下你对产出的期望吗?您希望“获得同一年的这些组合的计数”,但没有一组
['x','y','z']
共享同一年。你好,克里斯,第一次组合日期(1,2,2)是2016年12月8日00:00,因此一年bin结果为2016年12月8日00:00+1年=2017年12月8日00:00,因此此bin中相同组合(1,2,2)的计数为2,我希望这个数字不是在同一年,而是在一个日历年内?是的,我希望是一样的