【发布时间】:2020-10-28 13:55:11
【问题描述】:
我有两个这样的数据框:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675987'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
prop1 prop2
key1 key2
A 1 x m
B 6 y n
A 7 z b
5 u b
C 9 y b
8 n a
A 7 b s
prop1 prop2
key1 key2
A 1 NaN NaN
B 5 NaN NaN
C 9 NaN NaN
8 NaN NaN
A 7 NaN NaN
D 8 NaN NaN
7 NaN NaN
现在想用df1 填充df2 使用
df2.fillna(df1)
但是,我明白了
site-packages/pandas/core/generic.py in _where(self, cond, other, 就地、轴、级别、错误、try_cast)8694
other._get_axis(i).equals(ax) for i, ax in enumerate(self.axes)
8695): -> 8696 raise InvalidIndexError 8697 8698 # 把我从其他人中分割出来无效索引错误:
我过去成功地使用了这种方法,但我真的不明白为什么会失败。任何想法如何使它工作?
编辑
这是一个非常相似并且工作得很好的例子:
filler1 = pd.DataFrame({
'key': list('AAABCCDD'),
'prop1': list('xyzuyasj'),
'prop2': list('mnbbbqwo')
})
tobefilled1 = pd.DataFrame({
'key': list('AAABBCACDF'),
'keep_me': ['stuff'] * 10,
'prop1': [np.nan] * 10,
'prop2': [np.nan] * 10,
})
filler1['g'] = filler1.groupby('key').cumcount()
tobefilled1['g'] = tobefilled1.groupby('key').cumcount()
filler1 = filler1.set_index(['key', 'g'])
tobefilled1 = tobefilled1.set_index(['key', 'g'])
print(tobefilled1.fillna(filler1))
prints
key g
A 0 stuff x m
1 stuff y n
2 stuff z b
B 0 stuff u b
1 stuff NaN NaN
C 0 stuff y b
A 3 stuff NaN NaN
C 1 stuff a q
D 0 stuff s w
F 0 stuff NaN NaN
【问题讨论】:
标签: python pandas dataframe multi-index fillna