以下の処理を実装したく、コードを作成しているのですが、処理結果を既存のDataFrameに更新する所でつまづいてます。
①For文で各セルの値を取得
②各セルの値が0以外の場合+cv_date列の同一行が0で無い場合(日付)が入っているか判定
③②でTrueの場合、各セルの日付からcv_dateまでの日付を引き算で計算し、その結果をgap_time変数に格納
④各セルの元々日付の入っていたセルに③の結果の値を更新する
現在上記の④でつまづいています。
上記①〜④の処理後のdf1の中身を見ると処理以前と中身の値に変化がなく。うまく更新されていないようです。
DataFrameの値の更新に関して間違っている所などありましたらご教授頂きたいです。
よろしくお願いします。
本来は処理しているdf1[j][i]の中身がIf文内の処理結果のgap_timeの値に更新されるのが理想です。
データ更新部分の試したコード ①df1.iloc[i][j] = gap_time.days →変化なし。 ②df1[j][i] = gap_time.days →A value is trying to be set on a copy of a slice from a DataFrameと警告が出るものの変化なし。 ③df1.at[i,j] = gap_time.days →変化なし。
df1 push_a_start_date push_b_gel_start_date push_b_start_date push_c_start_date ... push_f_start_date push_g_start_date push_h_start_date cv_date 0 0 0 0 0 ... 0 0 0 0 1 0 0 0 0 ... 0 0 0 2021-03-30 2 2021-07-05 0 2021-07-06 0 ... 0 0 0 0 3 0 0 0 0 ... 0 0 0 2021-05-04 4 2021-06-30 0 0 0 ... 0 0 0 0
print(gap_time)結果 -262 -1 0 10 0 -13 0 -1
test.py df1 = pd.concat((push_start_df,cv_df), axis=1) df1 = df1.fillna(0) #push_start_df = push_start_df.fillna(0) res_list = [] for i in range(len(df1.index)): for j in df1.columns: if j != 'cv_date': if df1[j][i] != 0 and df1['cv_date'][i] != 0: datetime1 = datetime.strptime(df1['cv_date'][i], "%Y-%m-%d") datetime2 = datetime.strptime(df1[j][i], "%Y-%m-%d") gap_time = (datetime1 - datetime2) #print(gap_time.days) df1.at[i,j] = gap_time.days ← 更新処理
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/09 14:34