如何在 Pandas 多索引数据框中插入一行?

How to insert a row in a Pandas multiindex dataframe?

我有一个 Pandas 数据框,其中包含一个多索引(Reg、Type、Part、IsExpired)-

Reg        Type      Part     IsExpired    Quantity
APAC       Disk      A        False        10
                              True         12
EMEA       Disk      A        False        22
EMEA       Disk      B        False        13
                              True         17

我想确保每个 (Reg, Type, Part) 元组对于 IsExpired 都有 True 和 False。例如。我想为 (EMEA, Disk, A, True)-

插入一行
Reg        Type      Part     IsExpired    Quantity
APAC       Disk      A        False        10
                              True         12
EMEA       Disk      A        False        22
                              True         0   <-- inserted row
EMEA       Disk      B        False        13
                              True         17

你可以unstack and then fillna:

In [11]: df2
Out[11]:
                          Quantity
Reg  Type Part IsExpired
APAC Disk A    False            10
               True             12
EMEA Disk A    False            22
          B    False            13
               True             17

In [12]: df2.unstack()
Out[12]:
               Quantity
IsExpired         False True
Reg  Type Part
APAC Disk A          10    12
EMEA Disk A          22   NaN
          B          13    17

In [13]: df2.unstack().fillna(0)
Out[13]:
               Quantity
IsExpired         False True
Reg  Type Part
APAC Disk A          10    12
EMEA Disk A          22     0
          B          13    17

也许将其保留为一个专栏有意义吗?否则stack它回来:

In [14]: df2.unstack().fillna(0).stack()
Out[14]:
                          Quantity
Reg  Type Part IsExpired
APAC Disk A    False            10
               True             12
EMEA Disk A    False            22
               True              0
          B    False            13
               True             17

您是否考虑过只添加相关行?由于您实际上只是添加一个值的单元格,因此您可以像这样高效地完成它:

df.at[('EMEA', 'DISC', 'A', False), 'Quantity'] = 0