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