web-dev-qa-db-ja.com

列に基づく列に基づいて埋め込む方法(pandas爆発)

私は以下のようなデータフレーム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       
 _

Inplode(複数行から複数​​の行から下記の単一行に組み合わせる)と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'})
 _

しかし、この集約を実行しながらappliable_daysに参加できる方法

7
krishna koti

あなたの結果は平均よりも合計のように見えます。以下の解決策は 名前付き集合

    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
 _

それが意味がある場合は、「合計」を「意味」に変更できます。

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
 _
1
sammywemmy