[英]How iterate over rows in a dataframe dictionnary and change some values - Pandas Python
我有這本df字典:
DataFrameDict:
'A':
date_time begin end
2019-10-21 07:39:07.927729 NaT 2019-10-21 07:42:24.747350
2019-10-21 07:39:26.356716 NaT 2019-10-21 07:42:02.574268
2019-10-21 07:40:03.235327 NaT 2019-10-21 07:42:02.222821
'B':
date_time begin end
2019-10-21 07:39:07.927729 2019-10-21 07:42:24.747350 NaT
2019-10-21 07:39:26.356716 NaT 2019-10-21 07:42:02.574268
2019-10-21 07:40:03.235327 NaT 2019-10-21 07:42:02.222821
我想這樣做:對於每個數據幀的每一行,如果 begin[i] == NaT 那么 begin[i] = date_time[i] else: end[i] = date_time[i]。
結果必須是:
DataFrameDict:
'A':
date_time begin end
2019-10-21 07:39:07.927729 2019-10-21 07:39:07.927729 2019-10-21 07:42:24.747350
2019-10-21 07:39:26.356716 2019-10-21 07:39:26.356716 2019-10-21 07:42:02.574268
2019-10-21 07:40:03.235327 2019-10-21 07:40:03.235327 2019-10-21 07:42:02.222821
'B':
date_time begin end
2019-10-21 07:39:07.927729 2019-10-21 07:42:24.747350 2019-10-21 07:39:07.927729
2019-10-21 07:39:26.356716 2019-10-21 07:39:26.356716 2019-10-21 07:42:02.574268
2019-10-21 07:40:03.235327 2019-10-21 07:40:03.235327 2019-10-21 07:42:02.222821
所以我試試我的這段代碼:
for key in DataFrameDict.keys():
for row in DataFrameDict[key].itertuples():
if DataFrameDict[key].at[row.Index, 'begin'] == 'NaT':
DataFrameDict[key].at[row.Index, 'begin'] = DataFrameDict[key].at[row.Index, 'date_time']
else:
DataFrameDict[key].at[row.Index, 'end'] = DataFrameDict[key].at[row.Index, 'date_time']
但它不起作用...
謝謝你的時間 !
更新我試過你的解決方案 Quang Hoang
for key in DataFrameDict.keys():
mask = DataFrameDict[key]['begin'].isna()
DataFrameDict[key].loc[mask, 'begin'] = DataFrameDict[key]['date_time']
DataFrameDict[key].loc[~mask, 'end'] = DataFrameDict[key]['date_time']
數據的結果不正確。
讓我們試試這個功能:
def fill_date(df):
mask = df['begin'].isna()
df.loc[mask,'begin'] = df['date_time']
df.loc[~mask, 'end'] = df['date_time']
for df in [A,B]: fill_date(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.