簡體   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