1

我有以下数据框:

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) 

但生成的数据框没有向前填充任何值。如何仅为这两列创建具有前向填充数据的数据框?

4

2 回答 2

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') 
于 2017-08-21T14:10:27.450 回答
0

上面的答案对我不起作用,但这确实:

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

IIUC,.loc 方法已被贬值。

于 2021-03-29T18:13:14.630 回答