如何在 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
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
我有一个 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
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