列構造のpandasデータフレーム(df)があります:
_month a b c d
_
このデータフレームには、たとえば1月、2月、3月、4月のデータがあります。A、B、C、Dは数値列です。 2月の場合、列Aを再計算し、データフレームで更新します。つまり、月= 2月、A = B + C + D
私が使用したコード:
_ df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D']
_
これはエラーなしで実行されましたが、2月の列Aの値は変更されませんでした。コンソールで、次のメッセージが表示されました。
DataFrameからのスライスのコピーに値を設定しようとしています。
代わりに.loc [row_indexer、col_indexer] = valueを使用してみてください
.locを使おうとしましたが、現在作業中のデータフレームで.reset_index()
を使用していたため、インデックスを設定して.locを使用する方法がわかりません。私はドキュメントに従いましたが、明確ではありません。ここで私を助けてくれませんか?これはサンプルデータフレームです:
_ import pandas as pd import numpy as np
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
_
ある日付を更新したい:2000-01-03。リアルタイムデータであるため、データのスニペットを提供できません。
警告からわかるように、loc[row_index, col_index]
を使用する必要があります。データをサブセット化すると、インデックス値が得られます。 row_index
を渡してから、カンマcol_name
を渡す必要があります。
df.loc[df['month'] == 'Feb', 'A'] = df.loc[df['month'] == 'Feb', 'B'] + df.loc[df['month'] == 'Feb', 'C'] + df.loc[df['month'] == 'Feb', 'D']
最も美しくはありませんが、(行を明示的に繰り返さずに)目標を達成する方法は次のとおりです。
df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']
注:ix
非推奨 Pandas v0.20.0 iloc
/loc
を支持します。