【问题标题】:Python: Add aggregated columns to DataFrame based on the Key and additional conditionsPython:根据 Key 和附加条件将聚合列添加到 DataFrame
【发布时间】:2019-11-02 18:02:41
【问题描述】:

我在以下视图中有 2 个数据框: dogs 数据框是:

DogID   PuppyName1  PuppyName2  PuppyName3  PuppyName4   DogWeight
Dog1       Nick         NaN         NaN      NaN            12.7
Dog2       Jack         Fox         Rex      NaN            15.5         
Dog3       Snack        NaN         NaN      NaN            10.2
Dog4       Yosee        Petty       NaN      NaN            16.9

puppyWeights 数据框是:

PuppyName   Jan17  Jun18  Dec18  April19   
Nick         0.8    1.7     3.7     4.6
Jack         0.6    1.3     2.8     3.5        
Fox          0.9    1.7     3.4     4.3
Rex          1.0    2.3     3.0     4.2
Snack        0.8    1.7     2.8     4.4
Yosee        0.6    1.2     3.1     4.3
Petty        0.5    1.3     2.8     3.5 

我需要根据 PuppyWeights 数据框将有关幼犬体重的信息按月添加到 Dogs 数据框。如果 Dog 有超过 1 个孩子,例如:Dog2、Dog3-> 我需要对每个月的体重值取平均值 PuppyName。例如: Dog2 应该是 Jack 和 Foxin PuppyWeights 表中的值之间的平均值:

DogID   Jan17  Jun18  Dec18  April19   DogWeight
Dog2     0.75  1.5     3.1     3.9        15.5     

我尝试使用melt 函数将['PuppyName1', 'PuppyName2', 'PuppyName3', 'PuppyName4'] 列转换为行。

但是,当狗有多个孩子时,我不知道如何通过聚合将月份信息添加到 dogs 数据框。

df2 = dogs.melt(id_vars=['DogID','DogWeight'], var_name="Puppies", value_name='PuppyName')

期望的输出是:

DogID   Jan17  Jun18  Dec18  April19   DogWeight
Dog1     0.8    1.7    3.7     4.6        12.7     
Dog2     0.75   1.5    3.1     3.9        15.5   
Dog3     0.8    1.7    2.8     4.4        10.2
Dog4     0.55   1.25   2.95    3.9        16.9  

如何按月份将体重信息添加到 dogs 数据框?

如有任何想法,我将不胜感激。谢谢)

【问题讨论】:

    标签: python pandas dataframe pandas-groupby melt


    【解决方案1】:

    这是一种方法 melt dogs ,然后是 merge 和 groupby

    df2 = dogs.melt(id_vars=['DogID','DogWeight'], var_name="Puppies", value_name='PuppyName').dropna()
    
    df2.merge(df,on='PuppyName',how='left').groupby('DogID').mean()
    Out[423]: 
           DogWeight     Jan17     Jun18     Dec18  April19
    DogID                                                  
    Dog1        12.7  0.800000  1.700000  3.700000      4.6
    Dog2        15.5  0.833333  1.766667  3.066667      4.0
    Dog3        10.2  0.800000  1.700000  2.800000      4.4
    Dog4        16.9  0.550000  1.250000  2.950000      3.9
    

    【讨论】:

    • 太棒了!非常感谢您的帮助。这就是我问的。
    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2018-02-08
    • 2014-05-19
    • 2023-03-11
    • 2021-10-17
    相关资源
    最近更新 更多