扁平化带日期的多层索引列

0 投票
1 回答
29 浏览
提问于 2025-04-12 20:55

我有一个多重索引的列数据框,里面还有日期。我想把这些列变成行。

比如说:

| 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

撰写回答