[解決済み】複数のカラムを参照するPandasの「apply」関数が動作しないのはなぜですか?[クローズド]
2022-04-01 03:35:13
質問
以下のデータフレームで複数のカラムを使用する場合、Pandasのapply関数でいくつかの問題が発生します。
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
と、次のような関数があります。
def my_test(a, b):
return a % b
この関数を.NETで適用しようとすると
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
エラーメッセージが表示されるのですが。
NameError: ("global name 'a' is not defined", u'occurred at index 0')
私はこのメッセージを理解していません、私は適切に名前を定義しました。
この問題に関してご助言いただけると幸いです。
更新情報
ありがとうございました。確かにコードの構文に間違いがあり、インデックスは''と入れるべきでした。しかし、次のようなもっと複雑な関数を使用しても同じ問題が発生します。
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
解決方法は?
を忘れているようです。
''
という文字列があります。
In [43]: df['Value'] = df.apply(lambda row: my_test(row['a'], row['c']), axis=1)
In [44]: df
Out[44]:
a b c Value
0 -1.674308 foo 0.343801 0.044698
1 -2.163236 bar -2.046438 -0.116798
2 -0.199115 foo -0.458050 -0.199115
3 0.918646 bar -0.007185 -0.001006
4 1.336830 foo 0.534292 0.268245
5 0.976844 bar -0.773630 -0.570417
ちなみに、私見ですが、以下の方法の方がよりエレガントだと思います。
In [53]: def my_test2(row):
....: return row['a'] % row['c']
....:
In [54]: df['Value'] = df.apply(my_test2, axis=1)
関連
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] pandas DataFrameのカラムを複数行にアンネスト(分解)する方法
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandasのmap、applymap、applyメソッドの違い
-
[解決済み] pandas が他の列の値に基づいて新しい列を作成する / 複数の列の関数を行単位で適用する
-
[解決済み】Pandas DataFrameのより多くの列を見るために出力表示を拡大する方法は?
-
[解決済み】pandas 三元結合で複数のデータフレームをカラムで結合する。
-
[解決済み】pandasのDataFrameやSeriesに複数のフィルタを適用する効率的な方法
-
[解決済み] pandasのapply関数で行のインデックスを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] 私のコードでpandas apply()を使用したい(したくない)のはどんなときですか?