pandas - 仅当字符串匹配时递增累计和
pandas - increment cumulative sum only when string is matched
我正在寻找几种条件下的累积值:如果 Condition == New
,我只想添加值,并按名称对累积值进行分组。假设我有数据框 df:
Name | Condition | Value
A | New | 5
A | Not New | 7
A | New | 15
B | Old | 20
B | New | 14
B | Old | 3
我正在寻找输出:
Name | Condition | Value | Cumulative Value
A | New | 5 | 5
A | Not New | 7 | 5
A | New | 15 | 20
B | Old | 20 | 0
B | New | 14 | 14
B | Old | 3 | 14
对于 Condition == New
的每个条目,我将当前值添加到当前累积值。否则,累积值应保持不变。当出现新名称时,如果条件的第一个条目是 'Old',我将累积值重置为零,或者如果条件的第一个条目是 'New'.[=16,则无论第一个值是什么=]
我被代码卡住了
df['Cumulative Value'] = df.groupby(['Name'])['Value'].cumsum()
这是对Name进行分组并计算所有的累加和。不确定如何继续添加额外条件以检查条件列的字符串并在条件不匹配时保持累积值不变。
可以把Condition
不等于New
的地方Value
换成0再做累加:
df['Cumulative Value'] = df.Value.where(df.Condition == 'New', 0).groupby(df.Name).cumsum()
df
Name Condition Value Cumulative Value
0 A New 5 5
1 A Not New 7 5
2 A New 15 20
3 B Old 20 0
4 B New 14 14
5 B Old 3 14
我正在寻找几种条件下的累积值:如果 Condition == New
,我只想添加值,并按名称对累积值进行分组。假设我有数据框 df:
Name | Condition | Value
A | New | 5
A | Not New | 7
A | New | 15
B | Old | 20
B | New | 14
B | Old | 3
我正在寻找输出:
Name | Condition | Value | Cumulative Value
A | New | 5 | 5
A | Not New | 7 | 5
A | New | 15 | 20
B | Old | 20 | 0
B | New | 14 | 14
B | Old | 3 | 14
对于 Condition == New
的每个条目,我将当前值添加到当前累积值。否则,累积值应保持不变。当出现新名称时,如果条件的第一个条目是 'Old',我将累积值重置为零,或者如果条件的第一个条目是 'New'.[=16,则无论第一个值是什么=]
我被代码卡住了
df['Cumulative Value'] = df.groupby(['Name'])['Value'].cumsum()
这是对Name进行分组并计算所有的累加和。不确定如何继续添加额外条件以检查条件列的字符串并在条件不匹配时保持累积值不变。
可以把Condition
不等于New
的地方Value
换成0再做累加:
df['Cumulative Value'] = df.Value.where(df.Condition == 'New', 0).groupby(df.Name).cumsum()
df
Name Condition Value Cumulative Value
0 A New 5 5
1 A Not New 7 5
2 A New 15 20
3 B Old 20 0
4 B New 14 14
5 B Old 3 14