亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何基于列進行內爆(pandas 爆炸的反向)

如何基于列進行內爆(pandas 爆炸的反向)

收到一只叮咚 2023-10-11 20:02:09
我有一個如下所示的數據框 df  NETWORK       config_id       APPLICABLE_DAYS  Case    Delivery  0   Grocery     5399            SUN               10       1        1   Grocery     5399            MON               20       2       2   Grocery     5399            TUE               30       3        3   Grocery     5399            WED               40       4       我想要內爆(將多行中的 Applicable_days 組合成單行,如下所示)并獲取每個 config_id 的平均案例和交付  NETWORK       config_id       APPLICABLE_DAYS      Avg_Cases    Avg_Delivery 0   Grocery     5399            SUN,MON,TUE,WED         90           10使用網絡上的 groupby,config_id 我可以獲得 avg_cases 和 avg_delivery,如下所示。df.groupby(['network','config_id']).agg({'case':'mean','delivery':'mean'})但是,在執行此聚合時,我如何才能加入 APPLICABLE_DAYS 呢?
查看完整描述

2 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

如果您想要爆炸的“相反”,那么這意味著將其放入解決方案#1 中的列表中。您還可以在解決方案 #2 中作為字符串加入:


用于groupby 函數中的lambda x: x.tolist()列:'APPLICABLE_DAYS'.agg


df = (df.groupby(['NETWORK','config_id'])

      .agg({'APPLICABLE_DAYS': lambda x: x.tolist(),'Case':'mean','Delivery':'mean'})

      .rename({'Case' : 'Avg_Cases','Delivery' : 'Avg_Delivery'},axis=1)

      .reset_index())

df

Out[1]: 

   NETWORK  config_id       APPLICABLE_DAYS  Avg_Cases  Avg_Delivery

0  Grocery       5399  [SUN, MON, TUE, WED]         25           2.5

用于groupby 函數中的lambda x: ",".join(x)列:'APPLICABLE_DAYS'.agg


 df = (df.groupby(['NETWORK','config_id'])

      .agg({'APPLICABLE_DAYS': lambda x: ",".join(x),'Case':'mean','Delivery':'mean'})

      .rename({'Case' : 'Avg_Cases','Delivery' : 'Avg_Delivery'},axis=1)

      .reset_index())

df

Out[1]: 

   NETWORK  config_id       APPLICABLE_DAYS  Avg_Cases  Avg_Delivery

0  Grocery       5399       SUN,MON,TUE,WED         25           2.5

如果您正在尋找sum,那么您可以將和列更改mean為。sumCasesDelivery


查看完整回答
反對 回復 2023-10-11
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

你的結果看起來更像是一個總和,而不是平均值;下面的解決方案使用命名聚合:


? ? df.groupby(["NETWORK", "config_id"]).agg(

? ? APPLICABLE_DAYS=("APPLICABLE_DAYS", ",".join),

? ? Total_Cases=("Case", "sum"),

? ? Total_Delivery=("Delivery", "sum"),

)


? ? ? ? ? ? ? ? ? ? ? ? APPLICABLE_DAYS? ? ? ?Total_Cases? ?Total_Delivery

NETWORK config_id? ? ? ? ? ?

Grocery 5399? ? ? ? ? ? ? ? SUN,MON,TUE,WED? ? ? ? ? ?100? ? ? 10

如果是平均值,那么您可以將 'sum' 更改為 'mean' :


df.groupby(["NETWORK", "config_id"]).agg(

? ? APPLICABLE_DAYS=("APPLICABLE_DAYS", ",".join),

? ? Avg_Cases=("Case", "mean"),

? ? Avg_Delivery=("Delivery", "mean"),

)


? ? ? ? ? ? ? ? ? ? APPLICABLE_DAYS? ?Avg_Cases Avg_Delivery

NETWORK config_id? ? ? ? ? ?

Grocery 5399? ? ? ? ?SUN,MON,TUE,WED? ? ? 25? ? ? 2.5


查看完整回答
反對 回復 2023-10-11
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號