私の正確な問題を無駄に検索しました。これら2つのスレッドCreating a new column based on if-elif-else conditionと create new pandas dataframe column based on if-else condition with a lookupは私のコードを実行するのに失敗しましたが、私のコードをガイドしました。if/elif /と関数に基づいてpandasデータフレームに新しい列を作成
問題:以下に例を示したデータフレームがあります。リージョン属性には2つの値しかありません - aまたはb(またはそれ以上の値を持つこともできます)、年は同じですが、リージョンaは両方とも年などがあります。私がしたいのは、新しい列 "dollars"を作成し、地域 "a" AND yearが例えば2006の場合は、その行の売上を取り、のレートと新しい列 - ドルの値を加算します。私は初心者であり、これまでのところ、関数を介して - 明らかに.apply関数を実行すると、が返されます。ValueError:( 'Seriesの真理値はあいまいで、a.empty、a.bool() a.item()、a.any()またはa.all()。 '、' index 0で発生しました ')。私は特に、データフレームがかなり大きく、計算効率を最適化したいので、より効率的な実装に興味があります。
import pandas as np
rate_2006, rate_2007 = 100, 200
c = {
'region': ["a", "a", "a", "a", "a", "b", "b", "b", "b", "a", "b"],
'year': [2006, 2007, 2007, 2006, 2006, 2006, 2007, 2007, 2007, 2006, 2007],
'sales': [500, 100, 2990, 15, 5000, 2000, 150, 300, 250, 1005, 600]
}
df1 = pd.DataFrame(c)
df1
def new_col(row):
if df1["region"] == "a" and df1["year"] == 2006:
nc = row["sales"] * rate_2006
elif df1["region"] == "a" and df1["year"] == 2007:
nc = row["sales"] * rate_2007
elif df1["region"] == "b" and df1["year"] == 2006:
nc = row["sales"] * rate_2006
else:
nc = row["sales"] * rate_2007
return nc
df1["Dollars"] = df1.apply(new_col, axis=1)
df1
あなたの実装はサンプルデータセットで動作し、私が望むものを提供します。私はまだ私の巨大なデータでそれを実行しており、いつ完了するかはわかりません:-)。私が言及したように、おそらく私の方法より効率的なアプローチがあることを知っているので、探し続けるでしょう。 – wrangler
他にも効率的な方法があります。しかし、少なくともこのコードの作業を開始することができ、より良いアプローチを見つけたら、この部分を置き換えることができます。 – Sam
正確に私がやったこと - サムに感謝! – wrangler