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

Pandas 如何在多索引数据帧中插入行?,pandas,multi-index,Pandas,Multi Index,我有一个带有多索引(Reg、Type、Part、IsExpired)的熊猫数据帧- 我想确保IsExpired的每个(Reg、Type、Part)元组都有True和False。例如,我想为(EMEA、磁盘、a、True)插入一行- Reg类型零件为预计数量 APAC磁盘A错误10 真的12 EMEA磁盘A错误22 真的0你可以,然后: 也许把它作为一个专栏是有意义的?否则,它将返回: 您是否考虑过只添加相关行?因为您实际上只是添加了一个值的单元格,所以可以像这样高效地进行: df.at[('EM

我有一个带有多索引(Reg、Type、Part、IsExpired)的熊猫数据帧-

我想确保IsExpired的每个(Reg、Type、Part)元组都有True和False。例如,我想为(EMEA、磁盘、a、True)插入一行-

Reg类型零件为预计数量
APAC磁盘A错误10
真的12
EMEA磁盘A错误22
真的0你可以,然后:

也许把它作为一个专栏是有意义的?否则,它将返回:


您是否考虑过只添加相关行?因为您实际上只是添加了一个值的单元格,所以可以像这样高效地进行:

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

注意:在执行堆栈/取消堆栈操作时,通常会有一种可选的
pivot
/
pivot\u table
方法…谢谢Andy!我对上面的问题有一个小小的变化——对于我正在做的一些特殊处理,我一次处理一行这些记录。所以一次一个元组(Reg,Type,Part,IsExpired)。因此,对于所讨论的行,我最终得到了-[EMEA Disk A False 22],在这里我不能使用unstack/stack方法。有没有办法在这里为True插入一行?@VivekSharma如果你只处理一次。。。我认为要么你应该分批做(等到你有很多,然后使用熊猫)。或者只使用python,或者类似于
collections.deque
。还是我误解了你?为什么你必须一次处理一个数据帧?@VivekSharma(同样,一次创建一行数据帧并不能很好地扩展它的时间/内存是O(n^2)。在我的问题描述中,我留下了一个索引级别,在那里我必须填充一些缺失的数据,但在一个(Reg,Type,Part,IsExpired)的上下文中。因此,它一次处理一堆行。然而,在创建多级索引之前,我使用了您的建议来填充IsExpired值,它工作得非常好!谢谢!我已经使用熊猫将近5年了。我不敢相信这是我第一次遇到这种需要,并且刚刚听说了
。at()
来自您的评论。谢谢!
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
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
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