web-dev-qa-db-ja.com

Pandasキーエラーを適用

私はPythonとデータサイエンスにかなり慣れています。私はkaggle Outbrainコンペティションに取り組んでおり、コードで参照されているすべてのデータセットは https:// www .kaggle.com/c/outbrain-click-prediction/data

問題について:列_['document_id', 'category_id', 'confidence_level']_を持つデータフレームがあります。行の_'max_cat'_の最大の_'category_id'_値に対応する_'confidence_level'_値を返す4番目の列_'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'))
_

これは私にエラーを与えます:KeyError: ('document_id', 'occurred at index document_id')

このエラーが発生した理由、またはより効率的な方法で目標を達成する方法を説明できますか?

ありがとう!

19
user133248

comments でEdChumが回答したとおり。問題は、applyがデフォルトで列ごとに機能することです( docs を参照)。したがって、列名にはアクセスできません。

代わりに各行に適用するように指定するには、axis=1を渡す必要があります。

test.apply(lambda x: find_max(x,test,'document_id','confidence_level','category_id'), axis=1)
15
OriolAbril