データフレームを反復処理し、各行の値を引数として取る関数を作成したいと思います。例えば:
私のパンダのデータフレームは次のとおりです。
category sales met_sales
fruit 100 False
books 200 False
fruit 300 False
私は辞書を持っています: required_sales = {'fruit':150, 'books':200}
私が欲しい出力はこれです:
category sales met_sales
fruit 100 False
books 200 True
fruit 300 True
私の関数をそのように構成するのは正しいですか?
def met_sales(df, dict):
for row in df:
if row.sales > required_sales[row.category]:
#update met_sales column
row.met_sales = True
次に、単に呼び出しmet_sales(df,required_sales)
てDataFrameを更新できます。
これは、自分で作成した関数を使用してDataFrameを変更する良い方法ですか?
Series.map
辞書に使用し、列と比較しますsales
:
df['met_sales'] = df['sales'] >= df['category'].map(required_sales)
print (df)
category sales met_sales
0 fruit 100 False
1 books 200 True
2 fruit 300 True
詳細:
print (df['category'].map(required_sales))
0 150
1 200
2 150
Name: category, dtype: int64
関数:
dict
組み込みのPythonの予約語であるため、変数名として使用しないでくださいdict
。
def met_sales(df, d):
df['met_sales'] = df['sales'] >= df['category'].map(d)
return df
df1 = met_sales(df,required_sales)
print (df1)
category sales met_sales
0 fruit 100 False
1 books 200 True
2 fruit 300 True
注意:
のすべての値がcategory
辞書に存在する必要があります。存在しない場合、存在しないキーに対して欠落した値が返されます。
required_sales = {'fruit':150}
print (df['category'].map(required_sales))
0 150.0
1 NaN
2 150.0
Name: category, dtype: float64
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加