第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何設(shè)置和分組熊貓多級列?

如何設(shè)置和分組熊貓多級列?

回首憶惘然 2021-10-10 16:14:35
我有一個形狀像這樣的數(shù)據(jù)框:   PX_LAST PX_OPEN PX_CLOSE ticker source timestamp0        1       2        3      A   LSE   201801011        4       5        6      A   LSE   201801021        7       8        9      B   LSE   201801011       10      11       12      B   LSE   20180102....我想將其按摩為以下格式:                                     A                          B                                   LSE                        LSE            PX_LAST, PX_CLOSE, PX_OPEN PX_LAST, PX_CLOSE, PX_OPENtimestamp 20180101          1         2       3        7         8        9 20180102          4         5       6       10        11       12....我嘗試首先使用set_index將股票行情和源列設(shè)置為行索引并使用unstack將它們推到列軸上,這似乎確實有效df.set_index(['timestamp', 'ticker', 'source'])    .unstack(level=[1,2])    .swaplevel(0,1,axis=1)    .swaplevel(1,2,axis=1)這可以解決問題,但有兩個問題:1)它非常冗長,我們需要執(zhí)行所有交換級別調(diào)用才能使列成為正確的形狀。2)它似乎沒有按照我希望的方式進行分組,即我得到的結(jié)果是這樣的:              LSE     LSE      LSE      LSE ...          PX_LAST PX_LAST PX_CLOSE PX_CLOSE ...timestamp 20180101       1        7        2       8  ...20180102       4        8        5      11  ...有沒有更簡潔的方法來做到這一點,這樣我就可以獲得我想要的格式?
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

一種選擇是melt,set_index和unstack:


u = df.melt(['ticker', 'source', 'timestamp'])

(u.set_index(u.columns.difference({'value'}).tolist())['value']

  .unstack([1, 0, -1])

  .sort_index(axis=1))


ticker           A                        B                

source         LSE                      LSE                

variable  PX_CLOSE PX_LAST PX_OPEN PX_CLOSE PX_LAST PX_OPEN

timestamp                                                  

20180101         3       1       2        9       7       8

20180102         6       4       5       12      10      11

或melt, 和pivot_table:


u = df.melt(['ticker', 'source', 'timestamp'])

u.pivot_table(index='timestamp', 

              columns=['ticker','source','variable'], 

              values='value')


ticker           A                        B                

source         LSE                      LSE                

variable  PX_CLOSE PX_LAST PX_OPEN PX_CLOSE PX_LAST PX_OPEN

timestamp                                                  

20180101         3       1       2        9       7       8

20180102         6       4       5       12      10      11


查看完整回答
反對 回復(fù) 2021-10-10
?
藍(lán)山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

您的解決方案應(yīng)該稍作更改 - 中的列順序set_index,省略第二個swaplevel并添加sort_index:


df = (df.set_index(['timestamp', 'source', 'ticker'])

        .unstack(level=[1,2])

        .swaplevel(0,2,axis=1)

        .sort_index(axis=1)

)

print (df)

ticker           A                        B                

source         LSE                      LSE                

          PX_CLOSE PX_LAST PX_OPEN PX_CLOSE PX_LAST PX_OPEN

timestamp                                                  

20180101         3       1       2        9       7       8

20180102         6       4       5       12      10      11


查看完整回答
反對 回復(fù) 2021-10-10
?
收到一只叮咚

TA貢獻1821條經(jīng)驗 獲得超5個贊

我的提議是通過以下方式更改您的解決方案:


第 1 步:df.set_index(['timestamp', 'ticker', 'source']).unstack([1, 2]),就像您所做的那樣。


它將列保留為以下形狀:


          PX_LAST     PX_OPEN     PX_CLOSE

ticker          A   B       A   B        A   B

source        LSE LSE     LSE LSE      LSE LSE

(并timestamp作為索引)。


第 2 步:reorder_levels([1, 2, 0], axis=1),而不是您的 2 條 swaplevel說明。


它將列保留為:


ticker          A       B       A       B        A        B

source        LSE     LSE     LSE     LSE      LSE      LSE

          PX_LAST PX_LAST PX_OPEN PX_OPEN PX_CLOSE PX_CLOSE

最后一步是 sort_index(axis=1, level=[0,1], sort_remaining=False)


請注意,您只對級別 0 和 1 進行排序,因此最后級別的順序保持不變(PX_LAST、PX_OPEN、PX_CLOSE)。


所以整個腳本(即一條指令)是:


df2 = df.set_index(['timestamp', 'ticker', 'source']).unstack([1, 2])\

    .reorder_levels([1, 2, 0], axis=1)\

    .sort_index(axis=1, level=[0,1], sort_remaining=False)

當(dāng)你打印結(jié)果時,你會得到:


ticker          A                        B

source        LSE                      LSE

          PX_LAST PX_OPEN PX_CLOSE PX_LAST PX_OPEN PX_CLOSE

timestamp

20180101        1       2        3       7       8        9

20180102        4       5        6      10      11       12


查看完整回答
反對 回復(fù) 2021-10-10
  • 3 回答
  • 0 關(guān)注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號