微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何编辑运行总计列以使用每个新列值重新启动?

如何解决如何编辑运行总计列以使用每个新列值重新启动?

我有下图所示的数据框。每次“项目编号”列中有新值时,我都需要“总计#”列重新启动。例如,如果索引 4 是 104430-003 的最后一次出现,那么 14 将是最后一个 'Total #',它将开始在适当的 'Bin Loc' 中重新计算 VTHY-039 的'Total #'。

一旦我弄清楚那部分,我的最后一步就是在“总#”等于或大于 PV 选择#后删除任何相同的剩余“项目编号”。

Code

解决方法

pv['cumsum'] = pv.groupby('Item Number')['Items'].transform(pd.Series.cumsum)

pv

    Item Number Bin Loc.    PV Pick Items   cumsum
0   104430-003  A-P28-17B   4   2   2
1   104430-003  A-P39-20B   4   4   6
2   104430-003  A-P39-20C   4   1   7
3   104430-003  A-P39-26C   4   2   9
4   104430-003  A-P40-23C   4   5   14
... ... ... ... ... ...
829 VTHY-039    A-P45-09B   1   2   36
830 VTHY-039    A-P45-13B   1   2   38
831 VTHY-039    A-P45-19B   1   2   40
832 VTHY-039    A-P45-21B   1   3   43
833 VTHY-039    A-P46-21B   1   2   45
,

您可以使用 .loc 完成所有这些工作。首先,遍历所有唯一的项目编号并使用 .loc 到 transform a subset of columns。然后使用 .loc 仅选择 Total 的行

import pandas as pd

df = pd.DataFrame({'Item Number': ['104430-003','104430-003','VTHY-039','VTHY-039'],'PV Pick': [4,4,1,1],'Items': [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 循环后输出的样子: display(df) output

在选择 Total enter image description here

编辑:

要回答您的评论,您可以在循环中使用 .loc 查找“Total”>=“PV Pick”的行,使用 iloc 仅抓取第一行,并将这些值附加到 breakeven_final。然后你可以用 df_breakeven_final 连接 df。

breakeven_final = []
for item in items:
    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 的输出(注意索引已重置): enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。