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

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

基于另一個數據框創建新的 pandas 數據框

基于另一個數據框創建新的 pandas 數據框

翻過高山走不出你 2023-07-11 14:13:27
編輯:pandas 1.0.5有一個bug,升級到1.1.1后就沒有錯誤了。我有一個 pandas 數據框,如下所示:   Name      Date      Price      Label   Y      Z   foo1     1/1/20      100       1       _      _   foo1     1/1/20      200       2       _      _    .       .           .         .       .      .    .       .           .         .       .      .   foo1     1/8/20      240       1       _      _   foo2     1/2/20      500       1       _      _    .       .           .         .       .      .    .       .           .         .       .      .   foo2     1/7/20      423       4       _      _    .       .           .         .       .      .    .       .           .         .       .      .該列有 80 個唯一值Name,即 foo1 - foo80有 20 個唯一Date值有 4 個唯一Label值Y 和 Z 列與新數據框無關我想創建一個表 st,它將有 80 行(每行對應每個名稱)和 20*4 + 1 列(每個日期標簽組合 20x4,名稱 1 列)。最終的數據框應如下所示:**Name 1/1/20(Label1)  1/1/20(Label2)  1/1/20(Label3)  1/1/20(Label4)  1/2/20(Label1)    ...    4/7/20(Label4)** foo1    100             200              300             -1              -1                        -1 foo2    -1               -1               -1             -1              500                       -1..............................-1 表示原始條目中沒有特定名稱-日期-標簽組合的條目。我基本上是 pandas 的新手,我當然可以手動迭代地構建數據框(if..else 解決方案),但我相信有一個更快、可讀、更簡單的解決方案。
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

您正在尋找df.pivot


df = df.pivot(index='Name', columns=['Date', 'Label'], values='Price')

警告:如果任何名稱-日期-標簽組合重復(即出現在多行中),則會引發錯誤。使用pivot_table或更好groupby+unstack


如果Name、Date、 和Label在索引中,則使用unstack而不是pivot


使用示例數據更新


df = pd.DataFrame({

    # 'A': [160, 457, 457, 482, 482, 482, 482, 423, 223, 506],

    # 'B': ['8/27/2015 0:00','10/15/2015 0:00','10/15/2015 0:00','10/28/2015 0:00','10/28/2015 0:00','10/28/2015 0:00','10/28/2015 0:00','9/29/2015 0:00','9/9/2015 0:00','11/9/2015 0:00'],

    'Date': ['8/28/2015 0:00','10/16/2015 0:00','10/16/2015 0:00','10/29/2015 0:00','10/29/2015 0:00','10/29/2015 0:00','10/29/2015 0:00','9/30/2015 0:00','9/10/2015 0:00','11/10/2015 0:00'],

    # 'C': [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],

    # 'D': [1271, 1825, 1825, 1455, 1455, 1455, 1455, 2522, 1385, 1765],

    'Price': [1058, 1685, 1615, 1195, 1255, 1279, 1295, 2285, 1285, 1665],

    'Label': [3, 3, 2, 1, 3, 4, 2, 2, 1, 4],

    # 'E': [13, 127, 127, -1, -1, -1, -1, -1, -1, -1],

    'Name': ['foo1','foo2','foo2','foo3','foo3','foo3','foo3','foo4','foo4','foo3'],

    # 'F': [4, 4, 4, 3, 3, 3, 3, 3, 3, 3],

    # 'G': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],

    # 'H': ['Friday','Friday','Friday','Thursday','Thursday','Thursday','Thursday','Wednesday','Thursday','Tuesday'],

    # 'I': [213, 140, 210, 260, 200, 176, 160, 237, 100, 100],

    # 'J': [16.758457907159716,7.671232876712329,11.506849315068493,17.869415807560138,13.745704467353955,12.096219931271474,10.996563573883162,9.397303727200637,7.220216606498194,5.6657223796034]

})

df.Date = pd.to_datetime(df.Date)

df = df.pivot(index='Name', columns=['Date', 'Label'], values='Price')

df = df.fillna(-1)

print(df)

輸出


Date  2015-08-28 2015-10-16         2015-10-29  ...         2015-09-30 2015-09-10 2015-11-10

Label          3          3       2          1  ...       2          2          1          4

Name                                            ...

foo1      1058.0        NaN     NaN        NaN  ...     NaN        NaN        NaN        NaN

foo2         NaN     1685.0  1615.0        NaN  ...     NaN        NaN        NaN        NaN

foo3         NaN        NaN     NaN     1195.0  ...  1295.0        NaN        NaN     1665.0

foo4         NaN        NaN     NaN        NaN  ...     NaN     2285.0     1285.0        NaN


[4 rows x 10 columns]


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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