【问题标题】:How to move pandas column under the last row of the first column?如何在第一列的最后一行下移动熊猫列?
【发布时间】:2021-01-19 13:00:08
【问题描述】:

我正在尝试操作我的 pandas 数据框,以便可以:

  1. 创建一个标有“Ticker”的新列。
  2. 将“AAL”列移到“A”列下方
  3. 在新的“Ticker”列中将“A”列的所有元素标记为 A,在新移动的“AAL”列中标记为 AAL
  4. 将“A”列重命名为“Adj Close”
  5. 在“AAL”行的“Adj Close”列左侧复制索引值。

实际数据框输出:

        Adj Close   Adj Close
        A           AAL
Date            
1/11/19 80.22673035 28.54166412
1/12/19 84.7361908  28.57440376
1/1/20  82.17785645 26.74117851

所需的数据帧输出:

        Ticker      Adj Close
Date            
1/11/19    A        80.22673035
1/12/19    A        84.7361908
1/1/20     A        82.17785645     
1/11/19   AAL       28.54166412
1/12/19   AAL       28.57440376
1/1/20    AAL       26.74117851

这可能吗?如果可以,最好的方法是什么? 我试过使用 groupby 函数和 pivot ,但没有得到任何结果。我是 python 新手,所以我可能做错了什么。

感谢您的帮助并保持安全:)

编辑(请求的输出)print(df.to_dict())

{('Adj Close', 'A'): 
{Timestamp('2019-10-01 00:00:00'): nan, 
Timestamp('2019-11-01 00:00:00'): 80.22673034667969, 
Timestamp('2019-12-01 00:00:00'): 84.73619079589844, 
Timestamp('2020-01-01 00:00:00'): 82.1778564453125, 
Timestamp('2020-02-01 00:00:00'): 76.71327209472656, 
Timestamp('2020-03-01 00:00:00'): 71.28850555419922, 
Timestamp('2020-04-01 00:00:00'): 76.4993667602539, 
Timestamp('2020-05-01 00:00:00'): 87.95530700683594, 
Timestamp('2020-06-01 00:00:00'): 88.18482971191406, 
Timestamp('2020-07-01 00:00:00'): 96.33000183105469, 
Timestamp('2020-08-01 00:00:00'): 100.41999816894531, 
Timestamp('2020-09-01 00:00:00'): 100.94000244140625, 
Timestamp('2020-10-01 00:00:00'): 100.01000213623047, 
Timestamp('2020-10-02 00:00:00'): 100.01000213623047}, 
('Adj Close', 'AAL'): 
{Timestamp('2019-10-01 00:00:00'): nan, 
Timestamp('2019-11-01 00:00:00'): 28.541664123535156, 
Timestamp('2019-12-01 00:00:00'): 28.574403762817383, 
Timestamp('2020-01-01 00:00:00'): 26.741178512573242, 
Timestamp('2020-02-01 00:00:00'): 18.9798583984375, 
Timestamp('2020-03-01 00:00:00'): 12.1899995803833, 
Timestamp('2020-04-01 00:00:00'): 12.010000228881836, 
Timestamp('2020-05-01 00:00:00'): 10.5, 
Timestamp('2020-06-01 00:00:00'): 13.069999694824219, 
Timestamp('2020-07-01 00:00:00'): 11.119999885559082, 
Timestamp('2020-08-01 00:00:00'): 13.050000190734863, 
Timestamp('2020-09-01 00:00:00'): 12.289999961853027, 
Timestamp('2020-10-01 00:00:00'): 13.0, 
Timestamp('2020-10-02 00:00:00'): 13.0}}

【问题讨论】:

    标签: python pandas dataframe group-by pivot


    【解决方案1】:

    试试这个,如果你的列标题是多索引:

    df.stack(1).reset_index().rename(columns={'level_1': 'Ticker'})
    

    输出:

          Date Ticker  Adj Close
    0  1/11/19      A  80.226730
    1  1/11/19    AAL  28.541664
    2  1/12/19      A  84.736191
    3  1/12/19    AAL  28.574404
    4   1/1/20      A  82.177856
    5   1/1/20    AAL  26.741179
    

    【讨论】:

    • 你也是@Scott :-)
    • @ShubhamSharma 我收到“IndexError: Too many levels: Index has only 1 level, not 2”,可能是因为我没有复制 'AAL' 的索引值吗?跨度>
    • @YUragun 我猜你的数据框不包含多索引列。你能显示df.columns的输出吗?
    • @YUrangun... 你能用df.to_dict() 的输出更新你的问题吗?
    • 这确实有效。我刚刚保存然后在另一个引发问题的模块中重新加载 CSV。我猜当它重新加载回内存时会发生一些变化。谢谢你们的帮助和耐心:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多