这是这个 thead的后续问题。
那里的解决方案有效。但是,使用 frequency 1s
,该grouping
操作会在其间创建额外的空行:
df = pd.DataFrame([{'timestamp': '2021-05-28 14:00:00.274', 'value1': 123, 'value2': 21},
{'timestamp': '2021-05-28 14:00:00.374', 'value1': 101, 'value2': 33},
{'timestamp': '2021-05-28 14:00:01.294', 'value1': 7, 'value2': 12},
{'timestamp': '2021-05-28 14:00:02.002', 'value1': 42, 'value2': 10},
{'timestamp': '2021-05-28 14:00:02.039', 'value1': 1, 'value2': 34},
{'timestamp': '2021-06-28 14:00:03.00', 'value1': 2, 'value2': 41}])
对于上述的数据帧中,最后两个时间戳之间产生冗余行的数量庞大2021-05-28 00:02.00
和2021-06-28 00:03.00
在频率1s
。
如何限制只对源数据框中的任何内容进行分组而不引入冗余行?
使用Series.dt.floor
与DataFrame.pop
用于删除timestamp
从原来的:
#DatetimeIndex
df1 = df.groupby(df.pop('timestamp').dt.floor('1s')).max()
#column timestamp
#df1 = df.groupby(df.pop('timestamp').dt.floor('1s')).max().reset_index()
更简单的是:
#https://stackoverflow.com/a/68062217/2901002
out=df.assign(timestamp=df['timestamp'].dt.floor('1s')).groupby('timestamp',as_index=False).max()
DataFrame.dropna
如果原始数据中不存在缺失值,则可以使用另一种解决方案:
df=df.groupby(pd.Grouper(key='timestamp',freq='1s')).max().dropna().reset_index()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句