我有一个数据源,它为我提供以下结构的数据:| timestamp | tagid | value ||--------------------------|-------------|--------------|| 01.01.2018 00:00:00:01 | 1 | 100.0 || 01.01.2018 00:00:00:01 | 1 | 101.0 || 01.01.2018 00:00:00:01 | 2 | 99.0 || 01.01.2018 00:00:00:02 | 2 | 120.0 || 01.01.2018 00:00:00:02 | 3 | 150.0 || 01.01.2018 00:00:00:02 | 3 | 12.0 |我希望它看起来像下面这样| 1 | 2 | 3 | As you can see, I get two rows, because I |---------|---------|---------| have two instances of every TAGID| 100.0 | 99.0 | 150.0 || 101.0 | 120.0 | 12.0 |这意味着我必须使用数据透视表。我的代码是:pivot = df.pivot_table(index=['timestamp'], columns=['tagid'], values='value')这在一定程度上是有效的。新的数据结构正是我想要的。问题是我缺少应该在那里的行。我已经尝试过标志“fill_value”和“dropna”,但没有效果。这是我的思考过程:我的(真实)数据集有 9360 行,我有 144 个单独的标签。这意味着 144 个单独的标签必须重复 9360 / 144 = 65 次。我已经手动验证了这一点。无论如何,由于某种原因,我看不到少于 65 行,即 35 行。据我所知,数据足够干净,可以正常工作。我觉得我在这里遗漏了一个关键细节,请帮我找到那个细节。
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
一种方法从crosstab创建的index使用cumcount是你的问题的关键(PS:, ,,也包括工作,创建键后)pivotpivot_tablestack unstack
pd.crosstab(df.groupby('tagid').cumcount(),df.tagid,df.value,aggfunc='mean')
Out[947]:
tagid 1 2 3
row_0
0 100.0 99.0 150.0
1 101.0 120.0 12.0
添加回答
举报
0/150
提交
取消
