如果组位于指定列表中,如何基于组的值求和?

2024-09-28 19:07:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想通过获取每个特定制造商的数据框中名为“EQTUnit”的列的总和来更新每行中“num units Saled_x”的值。如果特定制造商的所有行都具有相同的“num units Sald_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

基本上,我需要经常更新'num units salled_x'字段,方法是获取每个唯一制造商的'EQTUnit'之和

预期产出:

   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   

Tags: 数据inforindexsalenumunits制造商
1条回答
网友
1楼 · 发布于 2024-09-28 19:07:47

使用.locdataman列表使用.isin()筛选行,查看它们是否在数据帧中

然后对过滤后的数据集使用.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   

相关问题 更多 >