Python:根据键和附加条件向DataFrame添加聚合列

2024-03-28 20:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面的视图中有两个数据帧: 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数据帧是:

^{pr2}$

我需要在基于PuppyWeights数据帧的Dogs数据帧中按月份添加关于小狗体重的信息。如果Dog有一个以上的子代,例如:Dog2Dog3->;我需要对每个月的权重值进行PuppyName的平均值。例如: Dog2应该是PuppyWeights表中Jack和{}值之间的平均值:

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

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

但是,我不知道当dog有多个子级时,如何通过聚合将月份信息添加到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数据帧添加权重信息?在

如果有任何建议,我将不胜感激。谢谢)


Tags: 数据信息nanjackdogs月份dog1dog2
1条回答
网友
1楼 · 发布于 2024-03-28 20:23:44

这里有一种方法meltdogs,然后merge和{}

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

相关问题 更多 >