每分钟在多个字段上聚合数据

时间:2019-05-20 08:23:27

标签: python pandas

我的数据集中有四列,其中一列是时代的时间戳,我使用pd.to_datetime将其转换为datetime,我想获取每分钟的每组计数

数据集是这样的

timestamp col2 col3 col4
1555127370.734 x a  p
1555127370.980 y b  q
1555127371.376 z c  r
1555127371.430 x a  p
1555127371.313 w g  t
1555127371.748 z h  u

所以我需要将它们按每col2每分钟,每col3每col4的分钟数以及该组的数量进行分组。

有没有办法做这只大熊猫?

编辑 输出应该像这样

1555127340 x a p 2
1555127340 y b q 1
1555127340 z c r 1
1555127340 w g t 1
1555127340 z h u 1

提前谢谢

2 个答案:

答案 0 :(得分:1)

DataFrame.resampleResampler.size一起使用:

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')

df = df.resample('min', on='timestamp').size().reset_index(name='count')
print (df)
            timestamp  count
0 2019-04-13 03:49:00      6

替代为DataFrameGroupBy.size

df = df.groupby(pd.Grouper(freq='min', key='timestamp')).size().reset_index(name='count')

另一种方法ID通过Series.dt.floor删除秒数并传递给groupby

df = df.groupby(df['timestamp'].dt.floor('min')).size().reset_index(name='count')
print (df)
            timestamp  count
0 2019-04-13 03:49:00      6

如果需要将多列分组,请使用list

df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df1 = (df.groupby([pd.Grouper(freq='min', key='timestamp'), 'col2', 'col3', 'col4'],sort=False)
        .size()
        .reset_index(name='count'))
print (df1)
            timestamp col2 col3 col4  count
0 2019-04-13 03:49:00    x    a    p      2
1 2019-04-13 03:49:00    y    b    q      1
2 2019-04-13 03:49:00    z    c    r      1
3 2019-04-13 03:49:00    w    g    t      1
4 2019-04-13 03:49:00    z    h    u      1

答案 1 :(得分:0)

尝试以下代码:

print(df.groupby(df['timestamp'].map(lambda x: x.minute)).count())