正如标题所暗示的,我想在我的 MultiIndex
DataFrame
中添加一个空行。一级索引需要有一个定义好的索引值,二级索引需要是 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
如果这不是这样的
Series
,我通常会附加一个 MultiIndex
: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
被转换为元组。我不能在 ignore_index=True
方法中使用 append
,因为这会删除 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。
最佳答案
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
关于python - 向 MultiIndex DataFrame 添加一个空行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49231190/