创建没有NaN的熊猫MultiIndex Dataframe

时间:2019-10-09 20:50:19

标签: python pandas dataframe

我觉得我在这里根本上缺少什么。我有一个这样的Pandas DataFrame:

df = pd.DataFrame(list(range(3)).T
df.columns = ['a.first', 'a.second', 'b']

#    a.first  a.second  b
# 0        0         1  2

我要创建的是一个MultiIndex DataFrame,可以在其中使用df.a,df.a.first和df.b。到目前为止,我得到的是str split方法:

a.columns = a.columns.str.split('.', expand=True)
#        a            b
#    first  second  NaN
# 0      0       1    2

因此,NaN在这里显然是个问题,因为要访问值b,则需要调用df.b[np.nan],这显然是错误的。

从这里开始,我想到的所有解决方案都开始像一种变通方法,在该方法中,我遍历各列并尝试用空字符串替换NaN。我想肯定有一种更直接的方法,因为我猜这是一个很普遍的问题,不是吗?

编辑:到目前为止,我想到的最丑陋的解决方案是:

def apply_multiindex(df, hier_sep='.'):
    depths = df.columns.str.split(hier_sep).map(len)
    add_hiers = max(depths)-depths
    df.columns = [column + hier_sep*add_hier[c]
                  for c, column in enumerate(df.columns)]
    df.columns = df.columns.str.split(hier_sep, expand=True)

apply_multiindex(a)
#        a          b
#    first  second  
# 0      0       1  2

我仍在期待更清洁的解决方案:)

1 个答案:

答案 0 :(得分:0)

对于我来说,rename的工作缺少价值,因为fillna的{​​{1}}未实现:

MultiIndex