为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas pivot_table 删除行

Pandas pivot_table 删除行

哆啦的时光机 2021-07-20 17:06:49
我有一个数据源,它为我提供以下结构的数据:| 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



查看完整回答
反对 回复 2021-07-27
  • 1 回答
  • 0 关注
  • 421 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号