在将行用于某些计算并生成新行之后,我想在循环/迭代中在数据帧中删除一行,这是迭代代码:
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循环之后,则会得到一个空文件。它删除了我在循环中生成的所有行。为什么会这样,删除行的正确方法是什么
答案 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)