[英]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.