Python: 如何设置分层列?
Python: How to set hierarchical columns?
我有以下数据框:
df=pd.DataFrame(index = ['2018-01-01','2018-01-02','2018-01-03','2018-01-04'])
df["ticker"] = ['TSLA', 'TSLA', 'IBM', 'IBM']
df["price"] = ['1000', '1200', '101', '108']
df["volume"] = ['100000', '123042', '1087878', '108732']
df["marketcap"] = ['1.2T', '1.4T', '30B', '35B']
df.index.rename('Date', inplace=True)
df:
ticker price volume marketcap
Date
2018-01-01 TSLA 1000 100000 1.2T
2018-01-02 TSLA 1200 123042 1.4T
2018-01-03 IBM 101 1087878 30B
2018-01-04 IBM 108 108732 35B
我想将代码设置为 columns-level = 0,并将价格、交易量、市值设置为 columns-level = 1。我希望我的 DataFrame 如下所示:
df
TSLA IBM
price volume marketcap price volume marketcap
Date
2018-01-01 1000 100000 1.2T NaN NaN NaN
2018-01-02 1200 123042 1.4T NaN NaN NaN
2018-01-03 NaN NaN NaN 101 1087878 30B
2018-01-04 NaN NaN NaN 108 108732 35B
如何使用 pandas 完成此操作?
您可以 set_index
和 unstack
稍微清理一下:
(df.set_index('ticker', append=True)
.unstack('ticker')
.swaplevel(axis=1)
.sort_index(axis=1, level=0, sort_remaining=False)
)
输出:
ticker IBM TSLA
price volume marketcap price volume marketcap
Date
2018-01-01 NaN NaN NaN 1000 100000 1.2T
2018-01-02 NaN NaN NaN 1200 123042 1.4T
2018-01-03 101 1087878 30B NaN NaN NaN
2018-01-04 108 108732 35B NaN NaN NaN
我有以下数据框:
df=pd.DataFrame(index = ['2018-01-01','2018-01-02','2018-01-03','2018-01-04'])
df["ticker"] = ['TSLA', 'TSLA', 'IBM', 'IBM']
df["price"] = ['1000', '1200', '101', '108']
df["volume"] = ['100000', '123042', '1087878', '108732']
df["marketcap"] = ['1.2T', '1.4T', '30B', '35B']
df.index.rename('Date', inplace=True)
df:
ticker price volume marketcap
Date
2018-01-01 TSLA 1000 100000 1.2T
2018-01-02 TSLA 1200 123042 1.4T
2018-01-03 IBM 101 1087878 30B
2018-01-04 IBM 108 108732 35B
我想将代码设置为 columns-level = 0,并将价格、交易量、市值设置为 columns-level = 1。我希望我的 DataFrame 如下所示:
df
TSLA IBM
price volume marketcap price volume marketcap
Date
2018-01-01 1000 100000 1.2T NaN NaN NaN
2018-01-02 1200 123042 1.4T NaN NaN NaN
2018-01-03 NaN NaN NaN 101 1087878 30B
2018-01-04 NaN NaN NaN 108 108732 35B
如何使用 pandas 完成此操作?
您可以 set_index
和 unstack
稍微清理一下:
(df.set_index('ticker', append=True)
.unstack('ticker')
.swaplevel(axis=1)
.sort_index(axis=1, level=0, sort_remaining=False)
)
输出:
ticker IBM TSLA
price volume marketcap price volume marketcap
Date
2018-01-01 NaN NaN NaN 1000 100000 1.2T
2018-01-02 NaN NaN NaN 1200 123042 1.4T
2018-01-03 101 1087878 30B NaN NaN NaN
2018-01-04 108 108732 35B NaN NaN NaN