扁平化带日期的多层索引列
我有一个多重索引的列数据框,里面还有日期。我想把这些列变成行。
比如说:
| A | A | B | B |
| X | Y | X | Y | 日期 |
| 1 | 2 | 3 | 4 | 五月-08 |
我需要它变成这样
| 开始 | 结束 | 值 | 日期 |
| A | X | 1 | 五月-08 |
| A | Y | 2 | 五月-08 |
等等。
抱歉格式有点乱。当我尝试添加代码时,提交表单出问题了,我也不知道怎么解决。
如果你有任何问题,请告诉我,我会尽力回答。
1 个回答
0
假设你有这样的输入:
df = pd.DataFrame([[1,2,3,4,'May-08']],
columns=pd.MultiIndex.from_tuples([
('A', 'X'), ('A', 'Y'),
('B', 'X'), ('B', 'Y'),
(None, 'Date')
]))
# A B NaN
# X Y X Y Date
# 0 1 2 3 4 May-08
你可以通过一些预处理来使用melt
,目的是去掉那些不太好处理的空值(NaNs/None),然后再对结果的索引进行后处理,以去掉元组的部分:
# only necessary if you have None/NaN in the MultiIndex
df.columns = pd.MultiIndex.from_frame(df.columns.to_frame().fillna(''))
out = (df.melt([('', 'Date')], var_name=['Start', 'End'], value_name='Value')
.rename(columns={('', 'Date'): 'Date'})
)
如果MultiIndex中的空级别是''
,那么你可以跳过预处理这一步。
输出结果:
Date Start End Value
0 May-08 A X 1
1 May-08 A Y 2
2 May-08 B X 3
3 May-08 B Y 4