簡體   English   中英

使用另一列中的條件分組

[英]Groupby using conditions from another column

這是一個非常基本的問題,但我的大腦正在放棄我,我真的很感激一些幫助。

我有一個包含 10000 行的數據集。 我有一個包含 100 個唯一區域名稱的區域名稱列。 我有一個類型從 1 到 10 的類型列。我有一個支出列。

我想按區域名稱對其進行分組,並添加一個新列,其中包含每個名稱的平均支出(甚至在舊支出列中)。

但是:我只想要 1-7 類型的平均值。 所以我想排除該區域內的任何類型 8、9 或 10。 除了,如果一個區域只包含類型 8、9 或 10。在這種情況下,我想要該支出的平均值。

我玩過但還沒有真正做到的:

方法 1:創建 2 個數據集,一個類型為 1-7,另一個區域中只有類型 8、9 或 10:

main=['1.','2.', '3.','4.', '5.', '6.', '7.']
eight_to_ten=['8.', '9.', '10.']

df_main = df[df['Type'].isin(main)]
df_main['avg_sales'] = df_main.groupby(['Area Name'])['Sales'].mean()

方法二:

df_new['avg_sales'] = df[df['Type'].isin(main)].groupby('Area Name')['Sales'].mean()

我認為有一種非常簡單的方法可以做到這一點,很可能不必將數據集分成 2 個然后將其連接回來。

使用 for 循環更容易嗎?

任何幫助,將不勝感激

我相信您需要按列表過濾第一行,如果每組需要新列,請使用GroupBy.transform

m1 = df['Type'].isin(main)
m2 = df['Type'].isin(eight_to_ten)
df = df_main[m1 | m2].copy()
df['avg_sales'] = df.groupby(['Area Name', m1])['Sales'].transform('mean')

或者對於帶有聚合的新 DataFrame 為區分組添加新數組:

arr = np.where(m1, 'first','second')
df1 = df.groupby(['Area Name', arr])['Sales'].mean().reset_index()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM