我有一個賬單詳細資訊資料集,我想根據它們的總價值對產品進行分組,另外我想要一個列來指示為相應產品產生最多收入的月份
資料集:
Bill_Id Month Product_Id Net_Value
1 1 20 100
2 1 20 100
3 2 20 100
4 1 30 200
5 2 30 200
6 2 30 200
Desired_Result
Product_Id Total_revenue Top_Month
20 300 1
30 600 2
這只是一個示例資料集 我有全年的交易資料
uj5u.com熱心網友回復:
使用旋轉資料框aggfunc=sum,然后使用sum和idxmax沿列軸查找總收入和對總收入貢獻最大的月份,最后concat沿列軸的各個組件得到結果
s = df.pivot_table('Net_Value', 'Product_Id', 'Month', aggfunc='sum')
pd.concat([s.sum(1), s.idxmax(1)], axis=1, keys=['Total_revenue', 'Top_Month'])
Total_revenue Top_Month
Product_Id
20 300 1
30 600 2
uj5u.com熱心網友回復:
假設根據 Net_Revenue 的最大總和,您只需要 1 個 Top 月份的值,下面是可能對您有用的代碼。
我們可以分三個階段來實作這一點,如下所述:
1.根據product id提取凈收入總和
df_1 = df.groupby(['Product_Id']).agg({'Net_Value' : sum}).reset_index()
df_1 = df_1.rename(columns={'Net_Value' : 'Total_revenue'})
print(df_1)
Product_Id Total_revenue
0 20 300
1 30 600
2.根據每個產品id的最大凈收入提取最佳貢獻月份
df_2 = df.groupby(['Product_Id', 'Month']).agg({'Net_Value' : sum}).sort_values('Net_Value', ascending=False).reset_index()
df_2 = df_2.drop_duplicates(subset=['Product_Id'])[['Product_Id', 'Month']]
print(df_2)
Product_Id Month
0 30 2
1 20 1
3. 最后一步是根據產品 ID 將這兩個資料框合并為一個
final_df = df_1.merge(df_2)
print(final_df)
Product_Id Total_revenue Month
0 20 300 1
1 30 600 2
如果有幫助,請對解決方案進行投票:)
uj5u.com熱心網友回復:
對@Shubham 方法的小修改
result = (
df.pivot_table("Net_Value", "Product_Id", "Month", aggfunc="sum")
.agg(["sum", "idxmax"], axis=1)
.set_axis(["Total_revenue", "Top_Month"], axis=1)
)
uj5u.com熱心網友回復:
由于正在互動多個列,因此我還使用了以下 apply功能groupby:
Net_value 使用基本聚合函式計算sum
Top_month 需要列之間的互動,因此,首先使用獲取最大 Net_value 的索引,idxmax然后使用loc查找月份
生成的 Pandas Series 物件具有 groupby 列 (Product_id) 作為索引,因此它使其成為我使用過的列reset_index
def f(x):
d = {}
d['Net_Value'] = x['Net_Value'].sum()
d['Top_month'] = df.loc[x['Net_Value'].idxmax(), "Month"]
return pd.Series(d, index=['Net_Value', 'Top_month'])
df.groupby('Product_Id').apply(f).reset_index()
# Output
Product_Id Net_Value Top_month
0 20 300 1
1 30 600 2
看看這個驚人的答案,它幫助了我,將來也可以幫助你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429594.html
上一篇:熊貓根據單元格資料框中的陣列中的其他列選擇第n個元素
下一篇:誰自動從資料框中獲取列的名稱
