如何使用 pandas 根据条件创建一个包含总和的新行?
初始表 -
Product Date CAT Value
Product A Apr F31 100
Product A Apr F32 200
Product A Apr F45 300
Product A Apr F46 400
Product A May F31 200
Product A May F32 300
Product A May F45 400
Product A May F46 500
Product B Apr F31 200
Product B Apr F32 300
Product B Apr F45 400
Product B Apr F46 500
Product B May F31 600
Product B May F32 700
Product B May F45 800
Product B May F46 900
我想通过将 F31 和 F32 组合成 F3 来创建这个,它应该给我值的总和。
Product Date CAT Value
Product A Apr F3 300
Product A Apr F45 300
Product A Apr F46 400
Product A May F3 500
Product A May F45 400
Product A May F46 500
Product B Apr F3 500
Product B Apr F45 400
Product B Apr F46 500
Product B May F3 1300
Product B May F45 800
Product B May F46 900
你能帮我吗?
最佳答案
为了创建上面提到的 DataFrame,我们需要应用两个操作。
字符串.replace
.groupby 与聚合,即 .sum() 和 .reset_index()
字符串替换方法用于替换字符串中的字符,通过该方法我们可以将字符串F31、F32转换为F3。
.replace('F31','F3')
.replace('F32','F3')
.groupby 方法用于根据给定的约束来分离数据。此方法将数据分成可以执行操作的 block 。在这里,我们需要根据多个列对数据进行分组。
然后,我们需要根据'CAT'列聚合值(value)列的总和,即首先按“产品”分组,然后按“日期”分组,最后按“CAT”分组。因此,为此我们使用 .sum()。
之后的结果将是一个分组对象,但是为了将其转换为DataFrame,我们需要使用.reset_index(),该方法允许填充基于输入条件列具有相应值的列。
Data.groupby(['Product','Date','CAT'])['Value'].sum().reset_index(name='Value')
代码片段如下所示:
Product = ['Product A','Product A','Product A','Product A','Product A','Product A','Product A','Product A','Product B','Product B','Product B','Product B','Product B','Product B','Product B','Product B']
Date = ['Apr','Apr','Apr','Apr','May','May','May','May','Apr','Apr','Apr','Apr','May','May','May','May']
CAT = ['F31','F32','F45','F46','F31','F32','F45','F46','F31','F32','F45','F46','F31','F32','F45','F46']
Value = [100, 200,300,400,200,300,400,500,200,300,400,500,600,700,800,900]
# Creating Data Frame
Data = pd.DataFrame({'Product':Product,'Date':Date,'CAT':CAT,'Value':Value})
# String Replace
Data['CAT'] = Data['CAT'].replace('F31','F3')
Data['CAT'] = Data['CAT'].replace('F32','F3')
# Group By Operation
DataG = pd.DataFrame(Data.groupby(['Product','Date','CAT'])['Value'].sum().reset_index(name='Value'))
应用上述操作之前的数据。
应用上述操作后的数据。
关于python - 在 Pandas 中使用 SUMIF 创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64105001/