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

如何使用Pandas查找以指定字符串开头的单元格位置

查找DataFrame中以特定字符串开头的单元格索引

嘿,我来帮你搞定这个在DataFrame里定位目标单元格的问题!下面针对你的示例场景,一步步给出具体的实现方案:

第一步:构造示例DataFrame

先把你给出的示例数据用pandas构造出来:

import pandas as pd

df = pd.DataFrame({
    'Price': [947.2, 129.3, 161.69],
    'Rate p/lot': ['1.25 BAM', '2.1 NAD', '0.8 CAD'],
    'Total Comm': [1.25, 1.25, 2.00]
})

第二步:实现查找逻辑

这里要注意:你的示例中NAD其实是单元格内容的结尾部分,所以我会同时说明开头匹配和结尾匹配两种情况,你可以按需切换:

方法一:遍历式查找(适合小数据集,逻辑直观)

# 定义要搜索的目标字符串
target_strings = ['NAD']

matches = []
# 遍历每一行
for row_idx, row in df.iterrows():
    # 遍历该行的每个单元格
    for col_name, value in row.items():
        str_val = str(value)  # 转为字符串,兼容数值类型单元格
        # 如果你要找「以目标字符串开头」的单元格,用startswith
        # if any(str_val.startswith(target) for target in target_strings):
        # 你的示例是找结尾匹配的,所以用endswith
        if any(str_val.endswith(target) for target in target_strings):
            # 转换为1-based索引(和你预期的(1,2)对应),如果用0-based就去掉+1
            col_idx = df.columns.get_loc(col_name) + 1
            matches.append((row_idx + 1, col_idx))

# 输出结果
print(matches)
# 输出: [(1, 2)] 正好对应你要的(1,2)位置的内容

方法二:向量化操作(适合大数据集,效率更高)

用applymap()生成布尔掩码,再提取匹配的索引:

target_strings = ['NAD']

# 生成布尔掩码,这里用endswith对应你的示例,开头匹配换startswith
mask = df.applymap(lambda x: any(str(x).endswith(t) for t in target_strings))
# 获取0-based的匹配索引
match_idx_0based = list(zip(mask[mask].index, mask[mask].columns))
# 转为1-based索引
match_idx_1based = [(r+1, df.columns.get_loc(c)+1) for r, c in match_idx_0based]

print(match_idx_1based)
# 输出: [(1, 2)]

关键说明

  • 如果确实需要严格匹配「以特定字符串开头」的单元格,把代码里的endswith()替换成startswith()即可。
  • pandas默认用0-based索引(行、列从0开始计数),如果你需要和示例一致的1-based索引,就给行号和列号各加1。

内容的提问来源于stack exchange,提问作者Piyush S. Wanare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:54