簡體   English   中英

如何迭代數據框字典中的行並更改某些值 - Pandas Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM