繁体   English   中英

从相同的列但以不同的方式创建两列

[英]Create two columns from the same columns but in different ways

从下表中,我想创建两列,根据“数字”和“类型”的值聚合“金额”。

数字 类型 数量
1个 一种 10
1个 一种 20
2个 一种 10
3个 20
2个 10
1个 20

这是我想要的表。 我要创建的第一列是“数量 A”,它是按“数字”分组的“类型”中带有“A”的行的聚合。 另一个“数量 A+B”是按“数字”分组的所有行的聚合,而不管“类型”的值如何。

数字 金额A 金额A+B
1个 30 50
2个 10 20
3个 0 20

我只是想出了创建子集和分别创建两列的方法。 但我想知道是否有更有效的方法。

你可以试试这个:

out = (
    df.astype({'number': 'category'})
    .query('type == "A"')
    .groupby(['number'])['amount'].sum()
    .to_frame('amount A')
)

out['amount A+B'] = df.groupby('number')['amount'].sum()

print(out)
        amount A  amount A+B
number                      
1             30          50
2             10          20
3              0          20

其中一个技巧是将'number'列转换为分类列,这样即使数字没有出现在'type A'中,我们也可以得到所有数字的sum

一旦我们这样做了,我们就可以很容易地在没有行的数字上执行 groupby where type == "A"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM