亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

將列標題轉換為觀察熊貓

將列標題轉換為觀察熊貓

揚帆大魚 2021-06-30 13:30:17
我不確定我的問題是否有特定的名稱(我記得聽過一個講座,老師說一部分知識是知道事物的名稱)。無論如何,我正在使用一些遺留系統,我的數據輸出如下:df = pd.DataFrame({'Shop' : [1,2,3,4,5,6,7,8,9,10],'Week 1' : [15,25,11,22,0,-1,15,11,76,62],'Week 2' : [5,44,55,21,12,51,-10,25,81,46]})print(df) Shop   Week 1  Week 20   1   15      51   2   25      442   3   11      553   4   22      214   5   0       125   6   -1      516   7   15     -107   8   11      258   9   76      819   10  62      46在這種情況下,周數應該是一個觀察值,而這個數字是一個應該分配給它的值。我正在嘗試做的是以下內容。轉置DF,但將索引保留為Shop。將每個實例變成一個觀察值,因此僅以前 2 個商店為例:    Shop    Week Hour0   1       1    151   1       2    52   2       1    253   2       2    44實現這一目標的最pythonic方法是什么?在相對中等大小的 df(500 行 52 周)上
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

您可以重命名列,pd.melt然后sort_values

df.columns = [i if not i.startswith('Week') else int(i[-1]) for i in df]


res = pd.melt(df, id_vars='Shop', var_name='Week', value_name='Hour')\

        .sort_values('Shop').reset_index(drop=True)


print(res)


    Shop Week  Hour

0      1    1    15

1      1    2     5

2      2    1    25

3      2    2    44

...

16     9    2    81

17     9    1    76

18    10    1    62

19    10    2    46


查看完整回答
反對 回復 2021-07-06
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

使用 wide_to_long


pd.wide_to_long(df,'Week ',i='Shop',j='week')

Out[770]: 

           Week 

Shop week       

1    1        15

2    1        25

3    1        11

4    1        22

5    1         0

6    1        -1

7    1        15

8    1        11

9    1        76

10   1        62

1    2         5

2    2        44

3    2        55

4    2        21

5    2        12

6    2        51

7    2       -10

8    2        25

9    2        81

10   2        46


#pd.wide_to_long(df,'Week ',i='Shop',j='week').sort_index(level=0).reset_index().rename(columns={'Week ':'Hour'})



查看完整回答
反對 回復 2021-07-06
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

我會使用這樣的東西,盡管所有的重命名有點混亂:


# Rename columns with dict comprehension so it can extend to more than week 1 and week 2

df2 = (df.rename(columns={i: int(i.split()[-1]) for i in df.columns[1:]})

       .set_index('Shop')

       .stack()

       .reset_index()

       .rename(columns={'level_1':'Week', 0:'Hour'}))


>>> df2


    Shop  Week  Hour

0      1     1    15

1      1     2     5

2      2     1    25

3      2     2    44

4      3     1    11

5      3     2    55

6      4     1    22

7      4     2    21

8      5     1     0

9      5     2    12

10     6     1    -1

11     6     2    51

12     7     1    15

13     7     2   -10

14     8     1    11

15     8     2    25

16     9     1    76

17     9     2    81

18    10     1    62

19    10     2    46


查看完整回答
反對 回復 2021-07-06
  • 3 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號