Pandas:基于列值匹配条件获取DataFrame的索引编号
解决方法:获取DataFrame中匹配另一DataFrame列值的索引列表
没问题,这在pandas里其实很容易实现,我结合你给出的示例数据给你详细说明:
核心思路
我们需要先筛选出df_1中Word列的值存在于df_2的Header列中的行,然后提取这些行的索引,最后转换为列表。
完整代码示例
首先我们先构造你给出的示例数据,然后执行核心操作:
import pandas as pd # 构造示例df_1 data1 = { 'W': [0.302665, -0.134841, 0.807706, -0.497104, -0.116773], 'X': [1.693723, 0.390528, 0.072960, -0.754070, 1.901755], 'Y': [-1.706086, 0.166905, 0.638787, -0.943406, 0.238127], 'Z': [-1.159119, 0.184502, 0.329646, 0.484752, 1.996652], 'Word': ['Abundant', 'Boring', 'Careful', 'Damage', 'Energy'] } df_1 = pd.DataFrame(data1, index=['A', 'B', 'C', 'D', 'E']) # 构造示例df_2 data2 = { 'W': [1.668068, 1.299748, -0.130016, -0.484928, -1.712263], 'X': [0.925862, 0.331183, -2.238203, -1.109264, 0.136120], 'Y': [1.057997, -0.509845, 0.973165, -0.558975, -0.464444], 'Z': [-0.920339, -0.903099, -0.024185, 1.042387, 0.050980], 'Header': ['Adorable', 'Boring', 'Cartoon', 'Damage', 'Energy'] } df_2 = pd.DataFrame(data2) # 核心操作:筛选匹配行,提取索引并转成列表 matching_indices = df_1[df_1['Word'].isin(df_2['Header'])].index.tolist() print(matching_indices) # 输出结果:['B', 'D', 'E']
代码解释
df_1['Word'].isin(df_2['Header']):生成一个布尔型Series,标记df_1中每一行的Word值是否在df_2的Header列中出现过。- 用这个布尔Series筛选
df_1后,通过.index获取筛选结果的索引对象。 - 最后调用
.tolist()将索引对象转换为普通的Python列表。
额外优化:处理重复值
如果df_2的Header列存在重复的单词,而你不想重复提取df_1的索引,可以先对df_2的列去重:
matching_indices = df_1[df_1['Word'].isin(df_2['Header'].unique())].index.tolist()
这样即使df_2里有重复的单词,df_1的索引也只会被提取一次。
内容的提问来源于stack exchange,提问作者tor_sten 20
相关产品推荐
相关产品推荐

