您可以使用 .loc 完成所有这些工作。首先,遍历所有唯一的项目编号并使用 .loc 到 transform a subset of columns。然后使用 .loc 仅选择 Total 的行
import pandas as pd
df = pd.DataFrame({'Item Number': ['104430-003', '104430-003', '104430-003', 'VTHY-039', 'VTHY-039', 'VTHY-039', 'VTHY-039'],
'PV Pick': [4, 4, 4, 1, 1, 1, 1],
'Items': [2, 4, 1, 2, 2, 2, 3]})
items = df['Item Number'].unique()
for item in items:
df.loc[df['Item Number'] == item, 'Total'] = df.loc[df['Item Number'] == item, 'Items'].cumsum()
df = df.loc[df['Total'] < df['PV Pick']]
这是运行 for 循环后的输出:
在选择 Total
编辑:
要回答您的评论,您可以在循环中使用 .loc 查找 'Total' >= 'PV Pick' 的行,使用 iloc 仅抓取第一行,并将这些值附加到 breakeven_final。然后你可以将 df 与 df_breakeven_final 连接起来。
breakeven_final = []
for item in items:
df.loc[df['Item Number'] == item, 'Total'] = df.loc[df['Item Number'] == item, 'Items'].cumsum()
breakeven = df.loc[df['Item Number'] == item].loc[df['Total'] >= df['PV Pick']].iloc[0]
breakeven_final.append(breakeven.values)
df_breakeven_final = pd.DataFrame(breakeven_final, columns=df.columns.values)
df = df.loc[df['Total'] < df['PV Pick']]
df_final = pd.concat([df, df_breakeven_final]).reset_index(drop=True)
df_final 的输出(注意索引已被重置):