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

如何提取df每行word_count最大值对应的review和review_id

解决方案

你的思路是对的,核心就是先定位每行word_count列最大值对应的索引,再用这个索引提取同位置的review和review_id即可,下面给两种可直接运行的实现:

方法1:逐行apply写法(逻辑直观,适合小数据量)

先构造测试数据方便复现:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'review': [['abc def', 'ghi'], ['jkl mno pqr', 'stu', 'vwx']],
    'review_id': [[1, 2], [3, 4, 5]],
    'word_count': [[2, 1], [3, 1, 1]]
})

核心处理代码:

df[['review', 'review_id']] = df.apply(
    lambda row: pd.Series([
        # 取word_count最大值对应位置的review
        row['review'][row['word_count'].index(max(row['word_count']))],
        # 取同位置的review_id
        row['review_id'][row['word_count'].index(max(row['word_count']))]
    ]),
    axis=1
)

运行后直接取df[['review', 'review_id']]就是你要的结果。

方法2:向量化写法(性能更高,适合大数据量)

apply逐行循环在数据量超过10万行的时候速度会明显变慢,用列表推导+argmax的方式性能会好很多:

import numpy as np
# 批量获取每行word_count最大值的索引
max_pos = df['word_count'].apply(np.argmax)
# 按索引批量提取对应值
df['review'] = [text_list[idx] for text_list, idx in zip(df['review'], max_pos)]
df['review_id'] = [id_list[idx] for id_list, idx in zip(df['review_id'], max_pos)]

注意:如果某行的word_count存在多个相等的最大值,上述两种方法默认都会取第一个出现最大值的对应内容,如果需要取最后一个/其他位置的最大值,调整索引取值逻辑即可。

两种方法最终输出效果完全一致:

reviewreview_id
abc def1
jkl mno pqr3

内容的提问来源于stack exchange,提问作者odebear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:09:28