簡體   English   中英

如何將分組 dataframe 的平均值分配給 python 中另一個 dataframe 的列

[英]How to assign the average of a grouped dataframe to a column of another dataframe in python

我有一個原始的 dataframe,如下例所示

data_original = {'website': ['a', 'b'], 'unit': ['finance', 'business']}
df_original = pd.DataFrame(data_original)

它產生了 dataframe:

在此處輸入圖像描述

我還有另一個 dataframe, df 如下:

data = {'date': ['1/1/2021', '1/2/2021', '1/3/2021', '1/4/2021', '1/5/2021', '1/1/2021', '1/2/2021', '1/3/2021', '1/4/2021',
             '1/5/2021'], 'website': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b'], 'amount_views': [23, 17, 10, 25, 2, 12, 7, 5, 17, 2]}

df = pd.DataFrame(data)

這導致了以下情況:

在此處輸入圖像描述

我想在第二個 dataframe 中獲取每個網站的平均瀏覽量,並將其作為列添加到原始 dataframe 中。

我已經這樣做了:

df_new = df.groupby(['website']).mean()
df_original['average_views'] = df_new

而我得到了這個

在此處輸入圖像描述

如何獲取平均值並將其添加到原始 dataframe 中?

您可以在開始時使用groupby ,並將結果merge回原始 dataframe:

pd.merge(df_original,
         df.groupby('website')['amount_views'].mean().to_frame('average_views'),
         left_on='website',right_index=True,how='left')

印刷:

  website      unit  average_views
0       a   finance           15.4
1       b  business            8.6

你也可以試試:

df_new = df.groupby(['website']).mean()
df_original = df_original.set_index('website')
df_original['amount_views'] = df_new['amount_views']
print(df_original)

您的錯誤在這一行:

df_original['average_views'] = df_new

第二行與索引連接。 由於df_new中沒有與df_original中的索引匹配的索引,因此您得到了Nan

您可以像我在上面所做的那樣在兩個數據框中都有共同的索引,或者將網站與網站匹配。 我認為我的更容易。

如果作為索引的website困擾您,請執行以下操作:

df_original = df_original.reset_index()

這將歸還您原來的 dataframe。

  website      unit  amount_views
0       a   finance          15.4
1       b  business           8.6

暫無
暫無

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

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