我有以下数据框:
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)
但结果数据框未转发填充任何值。 如何仅为这两列创建包含前向填充数据的数据框?
答案 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 方法已经折旧。