Python 熊猫:获取数据帧中的位置,在另一个数据帧中列出哪些索引
假设我有2个数据帧,填充索引以使列中的元素是唯一的,因为在实际数据中它们是: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
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