我有一个带有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列已转换为浮点数吗?
答案 0 :(得分:0)
如果未对索引进行排序,则会发生在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