【问题标题】:iteration issue, inner substraction does not work properly迭代问题,内减法不能正常工作
【发布时间】:2021-02-02 20:45:26
【问题描述】:
df2={'ATANAN_ORGANIZASYON':['000053','00012','00014'],
     'stock':[10,23,99]
      }
df2= pd.DataFrame(data=df2)

'''
talep={'FHY Sicil':['FB00662','FB003208'],
     'Şube Kodu':['00014','00014'],
    'adet':[50,50]
      }
talep= pd.DataFrame(data=talep)
'''
import warnings
warnings.filterwarnings('ignore')
lst=[]
for i in range(len(talep)):
    for j in range(len(df2)):
        if talep.iloc[i]['Şube Kodu']==df2.iloc[j]['ATANAN_ORGANIZASYON']:
            if  df2.iloc[j]['stock']>=talep.iloc[i]['adet']:
                lst.append([talep.iloc[i]['FHY Sicil'],talep.iloc[i]['Şube Kodu'],talep.iloc[i]['adet']])
                df2.iloc[j]['stock']=df2.iloc[j]['stock']-talep.iloc[i]['adet']
                break
            elif df2.iloc[j]['stock']<talep.iloc[i]['adet'] and  df2.iloc[j]['stock']>0:  
                lst.append([talep.iloc[i]['FHY Sicil'],talep.iloc[i]['Şube Kodu'],df2.iloc[j]['stock']])
                #print(df2.iloc[j]['stock'])
                df2=df2[~(df2['ATANAN_ORGANIZASYON']==df2.iloc[j]['ATANAN_ORGANIZASYON'])]
                break
                #df2.iloc[j]['stock']=0
                #df2.iloc[j]['stock']=df2.iloc[j]['stock']-talep.iloc[i]['adet']
                #print(df2['stock'])
final = pd.DataFrame(lst, columns=['FHY Sicil','Şube Kodu','adet'])

final.sort_values(by=['Şube Kodu']).head(3)

  1. 00014 的库存为 99,但 FB006620 和 FB003208 总共交付了 100 个。每人获得 50。
  2. df2.iloc[j]['stock']=df2.iloc[j]['stock']-talep.iloc[i]['adet'] >> 我需要在第一次迭代后显示剩余数量。即,由于 50 给了 FB006620,剩下的 49 应该给 FB003208。

【问题讨论】:

  • 您的代码发出警告。你看见了吗? df2.iloc[j] 返回数据的副本,而不是实际数据,因此您不会更改实际表。你真的需要熊猫吗?因为它看起来像是在碍事。
  • 您可以通过修复索引来完成这项工作。使用 df2['stock'][j] 代替 df2.iloc[j]['stock'],并且始终如此。你根本不需要 iloc。

标签: python dataframe loops for-loop iteration


【解决方案1】:

df2={'ATANAN_ORGANIZASYON':['000053','00012','00014'],
     'stock':[10,23,99]
      }
df2= pd.DataFrame(data=df2)

talep={'FHY Sicil':['FB00662','FB003208'],
     'Sube Kodu':['00014','00014'],
    'adet':[50,50]
}
talep= pd.DataFrame(data=talep)

lst=[]

for i, tt in talep['Sube Kodu'].items():
    for j, dd in df2['ATANAN_ORGANIZASYON'].items():
        if dd == tt:
            if df2['stock'][j]>=talep['adet'][i]:
                lst.append([talep['FHY Sicil'][i],tt,talep['adet'][i]])
                df2['stock'][j]-=talep['adet'][i]
            elif df2['stock'][j]<talep['adet'][i] and  df2['stock'][j]>0:  
                lst.append([talep['FHY Sicil'][i],tt,df2['stock'][j]])
                df2=df2[~(df2['ATANAN_ORGANIZASYON']==df2.iloc['ATANAN_ORGANIZASYON'][j])]
        break
final = pd.DataFrame(lst, columns=['FHY Sicil','Sube Kodu','adet'])

final.sort_values(by=['Sube Kodu']).head(3)

print(final)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2011-09-28
    • 2021-03-29
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多