Python 如何在熊猫中按3列分组,并从日期列中给出的第一个条目开始计算每年的频率
我有一个dataframe,其中有4列 我想按x,y,z列进行分组,并从分组框架中的第一个条目开始计算同一年中这些组合的数量 我有: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
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,我希望这个数字不是在同一年,而是在一个日历年内?是的,我希望是一样的