Pandas应用键错误

use*_*248 22 python group-by pandas keyerror kaggle

我是Python和数据科学的新手.我正在进行kaggle Outbrain竞赛,我的代码中引用的所有数据集都可以在https://www.kaggle.com/c/outbrain-click-prediction/data找到.

关于问题:我有一个带有列的数据框['document_id', 'category_id', 'confidence_level'].我想添加第四列,'max_cat'它返回与行的'category_id'最大值对应的'confidence_level''document_id'.

import pandas as pd
import numpy

main_folder = r'...filepath\data_location' + '\\'

docs_meta = pd.read_csv(main_folder + 'documents_meta.csv\documents_meta.csv',nrows=1000)
docs_categories = pd.read_csv(main_folder + 'documents_categories.csv\documents_categories.csv',nrows=1000)
docs_entities = pd.read_csv(main_folder + 'documents_entities.csv\documents_entities.csv',nrows=1000)
docs_topics = pd.read_csv(main_folder + 'documents_topics.csv\documents_topics.csv',nrows=1000)

def find_max(row,the_df,groupby_col,value_col,target_col):
   return the_df[the_df[groupby_col]==row[groupby_col]].loc[the_df[value_col].idxmax()][target_col]

test = docs_categories.copy()
test['max_cat'] = test.apply(lambda x: find_max(x,test,'document_id','confidence_level','category_id'))
Run Code Online (Sandbox Code Playgroud)

这给了我错误: KeyError: ('document_id', 'occurred at index document_id')

任何人都可以帮助解释为什么会发生此错误,或者如何以更有效的方式实现我的目标?

谢谢!

Ori*_*ril 24

正如EdChum在评论中所回答的那样.问题是apply默认情况下按列方式工作(请参阅文档).因此,无法访问列名称.

要指定它应该应用于每一行,axis=1必须传递:

test.apply(lambda x: find_max(x,test,'document_id','confidence_level','category_id'), axis=1)
Run Code Online (Sandbox Code Playgroud)

  • 看起来您放错了一些括号或逗号,因为它假定轴是 lambda 的参数而不是 apply 的参数 (3认同)