2017-11-02 13 views
1

私は質問があり、それを実行するためにどの機能を使用すべきかわかりません。私は2つの日付フレームを持っていますが、一方の値(finaldf)が他方の値(dfres0)よりも高いかどうかを比較し、それがゼロである(finaldf)を設定したい場合に比較します。ここでは、この日付のフレームがどのように見えるか、いくつかの例です:事前に2つの日付フレームと設定値を比較する

finaldf

..    NEG_00_04 NEG_04_08 NEG_08_12 NEG_12_16 NEG_16_20 NEG_20_24 \ 
datum_von                  
2017-10-18  9.58  8.08  0.39  2.32  0.54  0.60 
2017-10-19  6.34  6.20  0.15  1.32  0.46  0.56 
2017-10-20  7.68  5.86  0.29  1.04  0.48  0.54 
2017-10-21  13.40  10.52  2.50  3.09  2.97  2.44 
2017-10-22  25.53  17.33  4.05  12.62  2.35  1.14 

dfres0

... produktname NEG_00_04 NEG_04_08 NEG_08_12 NEG_12_16 NEG_16_20 NEG_20_24 \ 
datum_von                  
2017-10-18  12.440  11.012  0.604  4.189  0.900  0.912 
2017-10-19  10.144  8.880  0.465  2.700  0.740  0.832 
2017-10-20  10.370  8.280  0.394  1.970  0.694  0.732 
2017-10-21  14.207  10.800  1.940  2.940  2.334  2.164 
2017-10-22  24.750  20.285  3.900  18.241  2.476  1.870 

感謝を

+0

'print(finaldf == dfres0)'は可能ですか? – jezrael

+0

@jezraelが等しい場合、日付フレームfinaldfの値と同じにする必要がありますfinaldf –

+0

'boolean mask'または' ValueError:同じラベルのDataFrameオブジェクトのみを比較できますか 'という質問があります – jezrael

答えて

5

の場合両方DataFrameは同じインデックスとcolums値を持っており、すべてのデータが数値で使用mask次のとおりです。

df = finaldf.mask(finaldf > dfres0, 0) 
print (df) 
      NEG_00_04 NEG_04_08 NEG_08_12 NEG_12_16 NEG_16_20 NEG_20_24 
datum_von                 
2017-10-18  9.58  8.08  0.39  2.32  0.54  0.60 
2017-10-19  6.34  6.20  0.15  1.32  0.46  0.56 
2017-10-20  7.68  5.86  0.29  1.04  0.48  0.54 
2017-10-21  13.40  10.52  0.00  0.00  0.00  0.00 
2017-10-22  0.00  17.33  0.00  12.62  2.35  1.14 

詳細:

print (finaldf > dfres0) 
      NEG_00_04 NEG_04_08 NEG_08_12 NEG_12_16 NEG_16_20 NEG_20_24 
datum_von                 
2017-10-18  False  False  False  False  False  False 
2017-10-19  False  False  False  False  False  False 
2017-10-20  False  False  False  False  False  False 
2017-10-21  False  False  True  True  True  True 
2017-10-22  True  False  True  False  False  False 

EDIT:

列は、同じ唯一の違いは、その後dfres0produktname列である場合最初に削除してください:

df = finaldf.mask(finaldf > dfres0.drop('produktname', axis=1), 0) 
+0

であることが分かりません。私は常に問題を解決するために難しいものを考えていますが、Pythonは常に簡単なものを持っています。私の質問にお答えいただきありがとうございます。私は本当に感謝しています –

+0

ちょうど1つの質問私はまた、何とかproduktnameとしてdfres0の列のインデックスを設定できますか?最終的な日付と日付の両方で同じ名前を持つようになるでしょう –

+0

'finaldf = finaldf.set_index(dfres0 ['produktname']、append = True)'を使用して 'df = finaldf.mask(finaldf> dfres0.set_index( 'produktname' 、append = True)、0) ' – jezrael

関連する問題