【问题标题】:Add an empty row to MultiIndex DataFrame向 MultiIndex DataFrame 添加一个空行
【发布时间】:2018-08-20 05:37:57
【问题描述】:

正如标题所暗示的,我想在我的MultiIndexDataFrame 中添加一个空行。第一级索引需要有一个定义的索引值,第二级索引需要是np.nan。列中的值需要为np.nan

考虑以下几点:

import pandas as pd
import numpy as np

iterables = [['foo'], ['r_1', 'r_2', 'r_3']]
idx = pd.MultiIndex.from_product(iterables, names=['idx_1', 'idx_2'])
data = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
df = pd.DataFrame(data, idx, columns=['col_1', 'col_2', 'col_3'])
df
Out[93]:
             col_1  col_2  col_3
idx_1 idx_2                     
foo   r_1        1      2      3
      r_2        4      5      6
      r_3        7      8      9

如果不是这样的MultiIndex,我通常会附加一个Series

s = pd.Series(
    [np.nan, np.nan, np.nan], 
    index=['col_1', 'col_2', 'col_3'], 
    name='bar'
)
df.append(s)
Out[95]:
            col_1  col_2  col_3
(foo, r_1)    1.0    2.0    3.0
(foo, r_2)    4.0    5.0    6.0
(foo, r_3)    7.0    8.0    9.0
bar           NaN    NaN    NaN

在这种情况下,我的MultiIndex 被转换为元组。我不能在append 方法中使用ignore_index=True,因为这会删除MultiIndex。我觉得我很接近,但到目前为止。

我的输出应该是这样的:

# some magic
Out[96]:
             col_1  col_2  col_3
col_a col_b
foo   r_1    1.0    2.0    3.0
      r_2    4.0    5.0    6.0
      r_3    7.0    8.0    9.0
bar   NaN    NaN    NaN    NaN

(也可以接受二级索引None)。

我该怎么做?

使用 Python 3.6 和 Pandas 0.20.3。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    使用setting with enlargement:

    df.loc[('bar', ''), ['col_1', 'col_2', 'col_3']] = np.nan
    

    或者在name中使用元组:

    s = pd.Series(
        [np.nan, np.nan, np.nan], 
        index=['col_1', 'col_2', 'col_3'], 
        name=('bar', np.nan)
    )
    
    print (df.append(s))
                 col_1  col_2  col_3
    idx_1 idx_2                     
    foo   r_1      1.0    2.0    3.0
          r_2      4.0    5.0    6.0
          r_3      7.0    8.0    9.0
    bar   NaN      NaN    NaN    NaN
    

    s = pd.Series(
        [np.nan, np.nan, np.nan], 
        index=['col_1', 'col_2', 'col_3'], 
        name=('bar', '')
    )
    
    print (df.append(s))
                 col_1  col_2  col_3
    idx_1 idx_2                     
    foo   r_1      1.0    2.0    3.0
          r_2      4.0    5.0    6.0
          r_3      7.0    8.0    9.0
    bar            NaN    NaN    NaN
    

    【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2019-04-28
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2015-09-04
    相关资源
    最近更新 更多