pandas - 如何防止 pandas resample 重新采样 id 列
问题描述
我有一个带有 id 列(site_id、type_id、equipment_id)、时间戳和值的数据框,如下所示。
>>>print(df.head())
site_id type_id equipment_id timestamp value
47 9 332859965468 2018-07-04 10:30:04.052000+10:00 23.000000
47 9 332859965468 2018-07-04 10:30:04.064000+10:00 22.050505
47 9 332859965468 2018-07-04 10:30:04.090000+10:00 26.046154
47 9 332859965468 2018-07-04 10:30:04.101000+10:00 22.000000
47 9 332859965468 2018-07-04 10:30:04.113000+10:00 191.989868
我正在尝试使用以下代码在每个 (site_id,type_id,equipment_id) 组中重新采样
>>> df = df \
... .set_index(['timestamp']) \
... .sort_values(['site_id','type_id','equipment_id','timestamp']) \
... .groupby(['site_id','type_id','equipment_id']) \
... .resample('15T') \
... .mean()
我得到了意想不到的结果,索引中的所有 id 值都被复制了。似乎使用 dtype 而不是该列是否在索引中来执行聚合?我做错了什么吗?
site_id type_id equipment_id value
site_id type_id equipment_id timestamp
47 9 332859965468 2018-07-04 10:30:00+10:00 47.0 9.0 3.328600e+11 58.718625
2018-07-04 10:45:00+10:00 47.0 9.0 3.328600e+11 59.175833
2018-07-04 11:00:00+10:00 47.0 9.0 3.328600e+11 59.238318
2018-07-04 11:15:00+10:00 47.0 9.0 3.328600e+11 58.982763
编辑:我注意到添加 .reset_index(drop=True) 会删除重复的列 - 但现在的问题是整数 id 列已转换为浮点数?
解决方案
MultiIndex
如果索引未排序,则会发生这种情况。如果您想让索引再次看起来“干净”,您可以这样做:
df.sort_index(inplace=True)
例如,
df = pd.DataFrame(
data=np.random.rand(5, 4),
index=pd.MultiIndex.from_tuples([(i, j) for i, j in zip(np.random.choice(['a', 'b'], 5), np.random.choice(['x', 'y'], 5))])
)
print(df)
print(df.sort_index())
产生:
0 1 2 3
a x 0.198659 0.616800 0.438903 0.830216
y 0.649111 0.860940 0.440068 0.044067
b x 0.178537 0.601514 0.898179 0.140358
y 0.444738 0.393664 0.877928 0.913228
a x 0.369067 0.944636 0.740877 0.751681
0 1 2 3
a x 0.198659 0.616800 0.438903 0.830216
x 0.369067 0.944636 0.740877 0.751681
y 0.649111 0.860940 0.440068 0.044067
b x 0.178537 0.601514 0.898179 0.140358
y 0.444738 0.393664 0.877928 0.913228
推荐阅读
- c# - OpenWrite UnauthorizedAccessException
- javascript - 旧浏览器中 DOMRect 的替代方案
- visual-studio-code - 警告:“沙盒”不在已知选项列表中,但仍传递给 Electron/Chromium
- c++ - 如何解决输入和索引运算符重载问题?
- javascript - React CSS 类在生产服务器上自动覆盖
- php - 如何准备一个列表,以便成员保存到 wordpress 中的忍者形式,并且只能在他们自己的帐户中看到?
- xml - 在 schematron 中使用 for-each 循环
- node.js - HTML 文件上传上传缺少的图标而不是选择的图像
- firebase - 我可以调整 Firestore 侦听器频率吗?
- reactjs - React - 材质 UI - 自定义输入组件无法正常工作的 TextField 控制输入失去焦点