簡體   English   中英

熊貓堆疊數據框

[英]pandas stacking a dataframe

我有一個數據框,看起來像:

sensorId                   1      2      3   

9b:f3:55:19:00:4b:12:00    1      7      8    
bf:f3:55:19:00:4b:12:00    6      5      9   
da:f3:55:19:00:4b:12:00    1      1      2  

我想用以下結構重構為數據框:

 sensorId                 y
 9b:f3:55:19:00:4b:12:00  1
 9b:f3:55:19:00:4b:12:00  7
 9b:f3:55:19:00:4b:12:00  8
 bf:f3:55:19:00:4b:12:00  6
 bf:f3:55:19:00:4b:12:00  5
 bf:f3:55:19:00:4b:12:00  9
 da:f3:55:19:00:4b:12:00  1
 da:f3:55:19:00:4b:12:00  1
 da:f3:55:19:00:4b:12:00  2

我嘗試使用df.stack(),但結果並不令人滿意,因為它返回了pd.series:

9b:f3:55:19:00:4b:12:00  1      1
                         2      7
                         3      8
bf:f3:55:19:00:4b:12:00  1      6
                         2      5
                         3      9
da:f3:55:19:00:4b:12:00  1      1
                         2      1
                         3      2

使用double Series.reset_index第一個用於刪除第二級的MultiIndex ,第二個用於將Series轉換為DataFrame

df = df.stack().reset_index(level=1, drop=True).reset_index(name='y')
print (df)
                  sensorId  y
0  9b:f3:55:19:00:4b:12:00  1
1  9b:f3:55:19:00:4b:12:00  7
2  9b:f3:55:19:00:4b:12:00  8
3  bf:f3:55:19:00:4b:12:00  6
4  bf:f3:55:19:00:4b:12:00  5
5  bf:f3:55:19:00:4b:12:00  9
6  da:f3:55:19:00:4b:12:00  1
7  da:f3:55:19:00:4b:12:00  1
8  da:f3:55:19:00:4b:12:00  2

編輯:

因為df.stack返回MultiIndex ,這意味着sensorId不是列,而是索引。

如果sensorId為column:

df = df.set_index('sensorId').stack().reset_index(level=1, drop=True).reset_index(name='y')

或使用:

df = df.set_index('sensorId').stack().reset_index(name='y').drop('level_1',1)

還有一點對@jezrael的更正(他很好):

df = df.set_index('sensorId').stack().reset_index(level=1, drop=True).reset_index(name='y')

現在:

print(df)

方法是:

                  sensorId  y
0  9b:f3:55:19:00:4b:12:00  1
1  9b:f3:55:19:00:4b:12:00  7
2  9b:f3:55:19:00:4b:12:00  8
3  bf:f3:55:19:00:4b:12:00  6
4  bf:f3:55:19:00:4b:12:00  5
5  bf:f3:55:19:00:4b:12:00  9
6  da:f3:55:19:00:4b:12:00  1
7  da:f3:55:19:00:4b:12:00  1
8  da:f3:55:19:00:4b:12:00  2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM