首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用双字符串头对大熊猫数据进行整形

用双字符串头对大熊猫数据进行整形
EN

Stack Overflow用户
提问于 2020-02-04 16:07:47
回答 1查看 27关注 0票数 1

我有以下数据:

代码语言:javascript
复制
                    AAPL,Price AAPL,Volume  ...  GOOG,Ivol  GOOG,Shares
  Date                                                                
0 2019-12-25              21.5        1879            20.0         2010                             
1 2019-12-26              22.1        1887            19.9         2000                              
2 2019-12-27              23.0        1888            19.9         2045       
3 2019-12-30              22.3        1887            NaN          2050                                
4 2019-12-31              22.4        1900            20.1         1998       

我将需要运行这些股票的每一个功能的回归,我将不得不附加一组特定的假人。因此,我的目标是重塑数据库,使我有一个双索引的日期在第一位,股票名称在第二位,即

代码语言:javascript
复制
Date        Stock  Price  Volume ... Ivol Shares
2019-12-25  AAPL    21.5    1879 ... 22.1   3121
...         ...    ...    ...    ... ...  ... 
2019-12-25  GOOG    45.8    NaN  ... 20.0   2000 
...
2019-12-25   VER     NaN    NaN  ...  NaN    NaN   
2019-12-26  AAPL   ...  
...                                           
2019-12-31   VER    42.4    1900 ... 50.1   1998 

我的问题是,我不知道如何处理列名,因为它们是'Stock1,Feature1‘类型的字符串,因此我不知道如何生成复杂的双索引。有人能帮忙吗?请注意,每个股票的特性是相同的,即特性列表在不同的股票之间没有变化。当然,在重塑数据方面,我对不同类型的解决方案持开放态度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-04 16:30:13

你可以用pd.wide_to_long重塑这个。为了获得正确的格式,我将首先修改列索引,使之成为'AAPL,Price' -> 'Price,AAPL'

代码语言:javascript
复制
df.columns = [','.join(x[::-1]) for x in df.columns.str.split(',')]
stubs = df.columns.str.split(',').str[0].unique().tolist()
#['Price', 'Volume', 'Ivol', 'Shares']    

df = df.reset_index('Date')  # Need it out of index
df = pd.wide_to_long(df, i='Date', j='Stock', stubnames=stubs, sep=',', suffix='.*')

代码语言:javascript
复制
#df, based on the 4 columns provided:

                  Price  Volume  Ivol  Shares
Date       Stock                             
2019-12-25 AAPL    21.5  1879.0   NaN     NaN
           GOOG     NaN     NaN  20.0  2010.0
2019-12-26 AAPL    22.1  1887.0   NaN     NaN
           GOOG     NaN     NaN  19.9  2000.0
2019-12-27 AAPL    23.0  1888.0   NaN     NaN
           GOOG     NaN     NaN  19.9  2045.0
2019-12-30 AAPL    22.3  1887.0   NaN     NaN
           GOOG     NaN     NaN   NaN  2050.0
2019-12-31 AAPL    22.4  1900.0   NaN     NaN
           GOOG     NaN     NaN  20.1  1998.0

更简单的是,您可以创建列MultiIndex,然后创建stack

代码语言:javascript
复制
df.columns = pd.MultiIndex.from_tuples([tuple(x) for x in df.columns.str.split(',')])

df = df.stack(level=0) # Index level won't have a name.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60061321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档