Inplace Forward填充多级列数据框

时间:2017-08-21 13:59:00

标签: python pandas dataframe hierarchical fillna

我有以下数据框:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
 ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
df.loc["B", (slice(None), 'two')]=np.nan

现在,我想转发填写列的数据" baz"和" foo" (因此不适用于列" bar"以及" qux")。我试过了:

 df[["baz", "foo"]].ffill(inplace=True) 

但结果数据框未转发填充任何值。 如何仅为这两列创建包含前向填充数据的数据框?

2 个答案:

答案 0 :(得分:1)

我认为问题是由inplace=True设置引起的。尝试使用df.loc访问切片,然后分配ffill ed数据帧切片:

df.loc[:, ["baz", "foo"]] = df[["baz", "foo"]].ffill() 

输出:

first        baz                 foo          
second       one       two       one       two
A       0.465254  0.629161 -0.176656 -1.263927
B       2.051213  0.629161  1.539584 -1.263927
C      -0.463592 -0.240445 -0.014090  0.170188

或者,您可以使用df.fillna(method='ffill')

df.loc[:, ["baz", "foo"]] = df[["baz", "foo"]].fillna(method='ffill') 

答案 1 :(得分:0)

上面的答案对我不起作用,但这样做了:

df.loc[:, pd.IndexSlice[:, ['baz', 'foo']] = df.loc[:, pd.IndexSlice[:, 'baz', foo']].fillna(method='ffill')

IIUC,.loc 方法已经折旧。