You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:27:29