Python 熊猫:获取数据帧中的位置,在另一个数据帧中列出哪些索引

Python 熊猫:获取数据帧中的位置,在另一个数据帧中列出哪些索引,python,pandas,Python,Pandas,假设我有2个数据帧,填充索引以使列中的元素是唯一的,因为在实际数据中它们是: vals = pd.DataFrame(np.random.randint(0,10,(10, 3)), columns=list('ABC')) indexes = pd.DataFrame(np.argsort(np.random.randint(0,10,(10, 3)), axis=0)[:5], columns=list('ABC')) >>> vals A B C 0

假设我有2个数据帧,填充索引以使列中的元素是唯一的,因为在实际数据中它们是:

vals = pd.DataFrame(np.random.randint(0,10,(10, 3)), columns=list('ABC'))
indexes = pd.DataFrame(np.argsort(np.random.randint(0,10,(10, 3)), axis=0)[:5], columns=list('ABC'))

>>> vals
    A   B   C
0  64  20  48
1  28  60  81
2   5  73  77
3  74  66  86
4  41  39  21
5  65  37  98
6  10  20  73
7   6  70   3
8  36  29  28
9  43  13  12

>>> indexes
   A  B  C
0  4  2  3
1  3  3  8
2  5  1  7
3  9  8  9
4  2  4  0
我只想保留
vals
中的那些值,
索引中列出了哪些索引
。我不关心行完整性或NAs,因为稍后我将使用列作为系列

这就是我想到的:

vals_indexes = pd.DataFrame()
for i in range(vals.shape[1]):
    vals_indexes = pd.concat([vals_indexes, vals.iloc[[e for e in indexes.iloc[:, i] if e in vals.index], i]], axis=1)

>>> vals_indexes
      A     B     C
0   NaN   NaN  48.0
1   NaN  60.0   NaN
2   5.0  73.0   NaN
3  74.0  66.0  86.0
4  41.0  39.0   NaN
5  65.0   NaN   NaN
7   NaN   NaN   3.0
8   NaN  29.0  28.0
9  43.0   NaN  12.0

这有点难看,但对我来说很管用。问题:有更有效的方法吗?

在循环中使用
.loc
将不存在的索引替换为nan

for i in vals.columns:
    vals.loc[vals[i].isin(list(indexes[i].unique())),i]=np.nan

print(vals)

为什么c=48第1行不是nan?48不在索引中,但0在索引中。我将VAL和索引按一个顺序分开。
    A    B    C
0  NaN  2.0  NaN
1  NaN  5.0  NaN
2  2.0  3.0  NaN
3  NaN  NaN  NaN
4  NaN  NaN  6.0
5  9.0  NaN  NaN
6  NaN  NaN  4.0
7  NaN  7.0  NaN
8  2.0  NaN  NaN
9  NaN  NaN  NaN