【问题标题】:How do I sum values of groups based off if group is in a specified list?如果组在指定列表中,如何根据组对组的值求和?
【发布时间】:2020-07-13 20:49:23
【问题描述】:

我有一个数据框 (data2),其中包含许多不同制造商的销售订单,其中有一列名为“num units sold_x”。

如果制造商名称存在于名为 Dataman 的列表中:

我想更新每一行中“num units sold_x”的值,方法是获取数据框中名为“EQTUnit”的列的总和每个特定制造商。如果特定制造商的所有行都具有相同的“num units sold_x”字段,则很好,因为这是每个制造商的“EQTUnit”之和。

我认为这听起来很简单,但似乎无法解决这个问题。这是我目前所拥有的:

for index,row in data2.iterrows():
    for x in dataman:
        if data2.loc[index, 'EQTMan'] in dataman:
            data2.loc[index, 'num units sold_x'] = data2[data2['EQTMan'] == x].EQTUnit.sum()

这是一些示例数据:

    UCCStatus   UCCDate     EQTMan  EQTUnit
0   SALE        5/20/2019   SPARTAN 1
1   SALE        5/28/2019   SPARTAN 2
2   SALE        5/29/2019   SPARTAN 1
3   SALE        5/25/2019   SPARTAN 1
4   TERMINATI   7/16/2019   JOHNSON 11
5   SALE        8/8/2019    SPARTAN 1
6   TERMINATI   9/17/2019   SPARTAN 1
7   SALE        8/16/2019   TITAN   2
8   SALE        8/5/2019    TITAN   2
9   SALE        8/5/2019    TITAN   2

基本上,我需要通过获取每个唯一制造商的“EQTUnit”总和来经常更新“num units sold_x”字段。

预期输出:

   UCCStatus    UCCDate     EQTMan  EQTUnit num units sold_x
0   SALE        5/20/2019   SPARTAN 1       7
1   SALE        5/28/2019   SPARTAN 2       7
2   SALE        5/29/2019   SPARTAN 1       7
3   SALE        5/25/2019   SPARTAN 1       7
4   TERMINATI   7/16/2019   JOHNSON 11      11
5   SALE        8/8/2019    SPARTAN 1       7
6   TERMINATI   9/17/2019   SPARTAN 1       7
7   SALE        8/16/2019   TITAN   2   
8   SALE        8/5/2019    TITAN   2   
9   SALE        8/5/2019    TITAN   2   

【问题讨论】:

  • 您能否提供一些示例数据和预期输出?
  • 你现在可以检查一下是否更清楚了吗?
  • 您的预期输出是什么?像我的回答一样吗?你能以我粘贴输入数据的相同格式包含它吗?请不要在 StackOverflow 上发布图片。我已经编辑了你的问题。
  • 正是我要找的大卫 - 非常感谢!

标签: python pandas


【解决方案1】:

使用.loc 过滤行,通过使用.isin()dataman 列表来查看它们是否在数据框中。

然后在过滤后的数据集上使用 .groupbytransform

输入:

    UCCStatus   UCCDate     EQTMan  EQTUnit
0   SALE        5/20/2019   SPARTAN 1
1   SALE        5/28/2019   SPARTAN 2
2   SALE        5/29/2019   SPARTAN 1
3   SALE        5/25/2019   SPARTAN 1
4   TERMINATI   7/16/2019   JOHNSON 11
5   SALE        8/8/2019    SPARTAN 1
6   TERMINATI   9/17/2019   SPARTAN 1
7   SALE        8/16/2019   TITAN   2
8   SALE        8/5/2019    TITAN   2
9   SALE        8/5/2019    TITAN   2

代码:

dataman = ['SPARTAN', 'JOHNSON']
data2['num units sold_x'] = ''
data2.loc[data2['EQTMan'].isin(dataman), 'num units sold_x'] = 
data2.loc[data2['EQTMan'].isin(dataman)].groupby('EQTMan')['EQTUnit'].transform('sum')
data2

输出:

   UCCStatus    UCCDate     EQTMan  EQTUnit num units sold_x
0   SALE        5/20/2019   SPARTAN 1       7
1   SALE        5/28/2019   SPARTAN 2       7
2   SALE        5/29/2019   SPARTAN 1       7
3   SALE        5/25/2019   SPARTAN 1       7
4   TERMINATI   7/16/2019   JOHNSON 11      11
5   SALE        8/8/2019    SPARTAN 1       7
6   TERMINATI   9/17/2019   SPARTAN 1       7
7   SALE        8/16/2019   TITAN   2   
8   SALE        8/5/2019    TITAN   2   
9   SALE        8/5/2019    TITAN   2   

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2015-08-15
    • 2021-06-16
    • 2021-04-06
    • 2021-05-05
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多