在熊猫数据框中循环时掉一行

时间:2019-03-25 09:59:11

标签: python pandas dataframe

在将行用于某些计算并生成新行之后,我想在循环/迭代中在数据帧中删除一行,这是迭代代码:

for i,row in df_1_filtered.iterrows():
    if row.notnull()['Slutdato']: 
        date_range =row['Slutdato']-row['Indrykningsdato']
        for d in range(date_range.days+1):
            #generate rows with data from the row
            df_temp=pd.DataFrame(data=d_t)
            df_1_filtered=df_1_filtered.append(df_temp)
       # if i dont have drop, the dataframe will have the row and generated rows 
        df_1_filtered.drop(df_1_filtered.index[i], inplace=True) 

如果将df_1_filtered.drop(df_1_filtered.index[i], inplace=True)放在内部for循环之前,如果将df_1_filtered.drop(df_1_filtered.index[i], inplace=True)放在for循环之后,则会得到一个空文件。它删除了我在循环中生成的所有行。为什么会这样,删除行的正确方法是什么

1 个答案:

答案 0 :(得分:0)

最后我创建了一个空df,并使用if来追加所有行。

df_spread_enddate=pd.DataFrame()
for i,row in df_1_filtered.iterrows():

    if row.notnull()['Slutdato']: 
        date_range =(row['Slutdato']-row['Indrykningsdato']).days+1
        b_avg=row['Bruttopris']/date_range
        n_abg=row['Net-net kunde']/date_range
        for d in range(date_range):
            #generate rows with data from the row
            df_temp=pd.DataFrame(data=d_t)
            df_spread_enddate=df_spread_enddate.append(df_temp)
        #df_1_filtered=df_1_filtered.drop(df_1_filtered.iloc[i:], inplace=True)
    else:
        df_spread_enddate=df_spread_enddate.append(row)
相关问题