我有一个数据源,它为我提供以下结构的数据:
| 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 行。 据我所知,数据足够干净,可以正常工作。
我觉得我在这里遗漏了一个关键细节,请帮我找到该细节。
最佳答案
从 crosstab
中使用 cumcount
创建 index
的一种方法是您问题的关键(PS:,pivot
、 pivot_table
、 stack
unstack
也可以在创建 key 后工作)
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
关于python - Pandas 数据透视表删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930911/