python - Pandas 数据透视表删除行

标签 python pandas

我有一个数据源,它为我提供以下结构的数据:

| 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:,pivotpivot_tablestack 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/

相关文章:

python - 在 python 中转换列表的优雅且廉价的方法

python - 使用自定义刻度标签绘制矩阵数据

python 3迭代器接下来不执行

python - 使用 Pandas 读取 Excel 文件时如何指定列名?

带有 For 循环的 Python 定义函数

python - 生成一行值 = 前一行的值 + 变化

python - 如何通过从另一列复制值来填充缺失的 DataFrame 值

Python:使用字符串作为对象参数?

python - 在外部范围中定义的阴影名称有什么问题?

python - 在 python 中正确使用 isinstance