![](/img/trans.png)
[英]python pandas: pivot_table silently drops indices with nans
[英]Pandas pivot_table drops rows
我有一個數據源,它為我提供以下結構的數據:
| 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
,創建index
使用cumcount
是你的問題的關鍵(PS:, pivot
, pivot_table
, stack
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.