我有一个数据源,可为我提供以下结构的数据:
| 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行。 据我所知,数据足够干净,可以正常工作。
我觉得我在这里缺少一个关键的细节,请帮助我找到那个细节。
答案 0 :(得分:1)
从crosstab
到使用index
创建cumcount
的一种方式是您提出问题的关键(PS:,pivot
,pivot_table
,{{ 1}} stack
也可以,在您创建密钥之后)
unstack