トピックにあるすべてのソリューションを試しましたが、それらはすべて「インプレース」のデータフレームには適用されず、乗算は行われませんでした。パンダの条件付き値の乗算
ここに私がやろうとしていることがあります。 私は多レベルの列データフレームを多くの測定値で持っています。すべてのカラムは次のように命じている。
データ:
MeasurementType
Value Unit Type
StudyNumber
1 1.0 m/s a
2 1.7 m/s v
3 10.5 cm/s b
私は、すなわち私はユニットM/Sですべての値をフィルタリングする必要がある、単位はm/sのセンチメートル/秒ですべての測定値を変換しようとしていますそれらを10倍してから、[Unit]列の[Unit]を変更します。
私はフィルターを管理しましたが、* 10、.mul(10)で直接乗算するか、新しい割り当てを行うと、フィルターはかかりません。後でデータフレームを印刷すると、値に変化は見られません。
unit_df = data.iloc[:, data.columns.get_level_values(1)=='Unit']
unit_col_list = []
for unitcol in unit_df.columns:
unitget = unit_df[unitcol][unit_df[unitcol].notnull()].unique()
if unitget.size > 1:
unit_col_list.append(unitcol)
unit_col_list = [item[0] for item in unit_col_list] #so I get the header of the column
data_wrongunits = data[unit_col_list]
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*=10
または
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value'].mul(10)
または
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']=data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*10
フィルタは私Value列のシリーズを与える:ここで
はコードです。多分、別の構造が助けになるでしょうか?
を使用でき
は、[最初の答え]の内容を行います(https://stackoverflow.com/questions/ 20625582 /パンダでのコピーウォーニングの設定方法)は役に立ちますか?要素へのアクセスに問題があります。 'df.loc [conditions]'を使用するのをやめてください。 – Quickbeam2k1
私のコメントが更新されました。項目にアクセスするために 'loc'を使用し、括弧をつけません。 – Quickbeam2k1
ありがとう、実際にはこれが問題を解決しました! @ Quickbeam2k1 – Moiraine24