私はデータセットの重み計算を繰り返しており、重み付けされたグループが希望の目標にどのくらい近いかをチェックしています(例えば、以前の5%と比較して?)。特定の値よりも小さいまたはより大きい値のデータフレームをチェックする
私は元のデータフレームと「ターゲット」データフレームの両方を同様の構造に変換し、それらを差し引いて各セルの違いを表示しました。私は結果のデータフレームをスキャンして、グループに重み付けされた分布とターゲット分布の間に0.0001より大きい絶対差がないかどうかを確認したいと思います(もしそうなら、反復を止め、完了したdfを返します)。私はループを介して各列を評価することでこれを行うことができましたが、複数の列を一度に評価する良い方法はありますか?
私はここでやったことを、おそらくもっと良い方法があると確信しているので、どんな提案も歓迎します。ここで
def checkconvergence():
totaldist = pd.DataFrame()
for col in df[columns]:
totaldist[col] = df.groupby(col)['Weight'].sum()/df['Weight'].sum()
target = pd.DataFrame.from_dict(weightdict)
comparison = target.subtract(totaldist, fill_value=0)
check = 0
for col in comparison[columns]:
if (abs(comparison[col]) < 0.0001).all():
check+=1
if check == 4:
return df
else:
iterate(df)
私のデータフレームの例は... totaldistのDFです:
GenderAge race income region
1 0.037 0.148 0.109 0.179
2 0.050 0.109 0.149 0.211
3 0.091 0.049 0.224 0.375
4 0.080 0.018 0.160 0.235
5 0.079 0.676 0.235
6 0.074 0.044
7 0.079 0.080
8 0.043
9 0.064
10 0.081
11 0.083
12 0.079
13 0.077
14 0.084
とターゲットDF:
GenderAge race income region
1 0.040 0.173 0.108 0.179
2 0.057 0.125 0.148 0.211
3 0.078 0.043 0.225 0.375
4 0.074 0.019 0.161 0.235
5 0.077 0.640 0.236
6 0.075 0.043
7 0.083 0.079
8 0.039
9 0.056
10 0.078
11 0.077
12 0.081
13 0.082
14 0.103
などのようなDF私の比較:
GenderAge race income region
1 0.003 0.025 -0.001 0.000
2 0.007 0.016 0.000 0.000
3 -0.013 -0.006 0.001 0.000
4 -0.006 0.001 0.001 0.000
5 -0.002 -0.036 0.002 0.000
6 0.001 0.000
7 0.004 -0.001
8 -0.004
9 -0.008
10 -0.003
11 -0.006
12 0.002
13 0.005
14 0.019
この例では、comこの例のparison dfは0.0001より大きいいくつかの値を持っていますが、私のスクリプトはもはやこれがなくなるまで反復を続けます。
データフレームのスニペットと、出力がどのように表示されるかを記入してください。 –
確かに、ちょうど追加されました。 – oddnumberedcat
あなたが投稿したものがソースですか?またはあなたの機能を実行した結果? –