簡體   English   中英

將時間序列數據中的行轉換為列

[英]Converting row in timeseries data to column

假設我有一個類似的時間序列

In [41]: df = pd.DataFrame(dict(names=list('abcaabcabbcc'), vals=np.random.randint(0, 10, 12)), index
    ...: =pd.date_range('2017-03-01', periods=12))

In [42]: df
Out[42]: 
           names  vals
2017-03-01     a     2
2017-03-02     b     9
2017-03-03     c     6
2017-03-04     a     6
2017-03-05     a     5
2017-03-06     b     2
2017-03-07     c     3
2017-03-08     a     1
2017-03-09     b     1
2017-03-10     b     1
2017-03-11     c     1
2017-03-12     c     0

如何將names行轉換為對應的vals所在的列標題? 例如

               a     b     c  
2017-03-01     2   nan   nan
2017-03-02   nan     9   nan
...

我一直在玩pd.melt ,並嘗試將names添加到索引中,然后重設索引,以便它們以某種方式成為列,但是我非常困惑。

您可以使用:

print (pd.pivot(index=df.index, columns=df['names'], values=df['vals']))

要么:

print (df.set_index('names', append=True)['vals'].unstack())
names         a    b    c
2017-03-01  4.0  NaN  NaN
2017-03-02  NaN  0.0  NaN
2017-03-03  NaN  NaN  3.0
2017-03-04  8.0  NaN  NaN
2017-03-05  0.0  NaN  NaN
2017-03-06  NaN  0.0  NaN
2017-03-07  NaN  NaN  9.0
2017-03-08  6.0  NaN  NaN
2017-03-09  NaN  6.0  NaN
2017-03-10  NaN  0.0  NaN
2017-03-11  NaN  NaN  3.0
2017-03-12  NaN  NaN  9.0

print (df.reset_index().pivot_table(index='index', columns='names', values='vals'))

您還可以使用unstack():

In [12]: df.set_index('names', append=True).unstack('names')
Out[12]:
           vals
names         a    b    c
2017-03-01  1.0  NaN  NaN
2017-03-02  NaN  4.0  NaN
2017-03-03  NaN  NaN  5.0
2017-03-04  8.0  NaN  NaN
2017-03-05  8.0  NaN  NaN
2017-03-06  NaN  5.0  NaN
2017-03-07  NaN  NaN  7.0
2017-03-08  5.0  NaN  NaN
2017-03-09  NaN  7.0  NaN
2017-03-10  NaN  4.0  NaN
2017-03-11  NaN  NaN  3.0
2017-03-12  NaN  NaN  4.0

暫無
暫無

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

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