如何迭代dataframe字典中的行并更改某些值

2024-09-22 10:21:13 发布

您现在位置: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\u time[I] else:end[i]=日期时间[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']

但它不起作用

谢谢你的时间

更新 我试过你的解决方案广黄

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']

数据的结果不正确


Tags: 数据keyinfordateindextimemask