私は現在、パンダに関するいくつかのことを考えています。私は次の問題を解決する最も効果的な方法が何であるか考えています。ここでは簡単な例を示します。パンダを使用してインデックス/カラムへのアクセスを「適用」しますか?
は、私は、データフレーム内のいくつかのデータを持っていると言う:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=['a','b','c','d'],
index=np.random.randint(0,10,size=10))
このデータは、このようなものになります。
a b c d
1 0 0 9 9
0 2 2 1 7
3 9 3 4 0
2 5 0 9 4
1 7 7 7 2
6 4 4 6 4
1 1 6 0 0
7 8 0 9 3
5 0 0 8 3
4 5 0 2 4
を今私は(データフレーム内の各値にいくつかの機能を適用したいです例えば以下のように)、結果の出力としてデータフレームを戻す。トリッキーな部分は、私が現在適用しているインデックスの値によって、適用する関数です。私は、データフレーム内の個々のセルに関数を適用したい場合
def f(cell_val,row_val):
try:
return cell_val/row_val
except ZeroDivisionError:
return -1
通常、私はちょうど「F」にapplymap呼ぶだろう。 2番目の引数(この例ではrow_val)を渡さなければならない場合でも、引数が固定された数であれば、 "lambda x:f(x、i)"のようなラムダ式を書くことができます。私が望んだ番号。しかし、私の2番目の引数は、私が現在関数を呼び出しているデータフレームの行によって異なります。つまり、applymapだけでは使えません。
このような問題を効率的に解決する方法を教えてください。私はこれを行うにはいくつかの方法が考えられますが、どれも「正しい」と感じる人はいません。個々の値をループして1つ1つ置き換えることはできますが、それは本当に扱いにくく遅いようです。また、(セルの値、行の値)タプルを含む完全に別のデータフレームを作成し、タプルのデータフレームに組み込みのpandas applymapを使用するようなこともできます。しかし、それはかなりハッキーなようだと私はまた、余分なステップとして完全に別のデータフレームを作成しています。
これに対して、より良い解決策が必要です(私のデータフレームが非常に大きくなる可能性があるため、速い解決策があります)。
申し訳ありません: 'df.div(df.index.to_series()、axis = 0)'? – EdChum