【问题标题】:Converting a DataFrame into a New Table using a Key-Value as the Index使用键值作为索引将 DataFrame 转换为新表
【发布时间】:2022-01-11 18:37:16
【问题描述】:

我正在尝试获取时间序列格式的大型股票数据表,并将其转换为由股票代码和日期组合索引的 DataFrame。

data = [['MSFT', 10,9,4,3.5,2.2], ['AAPL', 14,13.1,12.2,14.5,14.6]]
df = pd.DataFrame(data, columns = ['Ticker', '12/31/2021','11/30/2021','10/31/2021','9/30/2021','8/31/2021'])

所以它看起来更像下面这样:

data2 = [['MSFT_12/31/2021',10], ['MSFT_11/30/2021',9.0], ['MSFT_10/31/2021',4.0], ['AAPL_12/31/2021',14],['AAPL_8/31/2021',14.6]]
df_2 = pd.DataFrame(data2, columns = ['Key', 'Value'])
| Key            | Value |
|MSFT_12/31/2021 |  10.0 |
|MSFT_11/30/2021 |  9.0  |
|MSFT_10/31/2021 |  4.0  |
|AAPL_12/31/2021 |  14.0 |
|AAPL_8/31/2021  |  14.6 |

有没有pythonic或简单的方法来做到这一点?

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python pandas dataframe


【解决方案1】:

您可以melt从宽到长reshape,并通过串联Ticker和reshape后的列创建一个新列:

(df.melt(id_vars=['Ticker'])
   .assign(Key=lambda d: d['Ticker']+'_'+d['variable'])
   .drop(columns=['Ticker', 'variable'])
)

输出:

   value              Key
0   10.0  MSFT_12/31/2021
1   14.0  AAPL_12/31/2021
2    9.0  MSFT_11/30/2021
3   13.1  AAPL_11/30/2021
4    4.0  MSFT_10/31/2021
5   12.2  AAPL_10/31/2021
6    3.5   MSFT_9/30/2021
7   14.5   AAPL_9/30/2021
8    2.2   MSFT_8/31/2021
9   14.6   AAPL_8/31/2021

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2017-02-26
    • 2020-01-11
    相关资源
    最近更新 更多