Pandas将行复制到权重为

时间:2015-11-12 12:17:18

标签: python pandas duplicates row rules

我试图合并一个数据框中的行,其中我对一个ID有不同的输入,所以我希望每个ID都有一个权重。

我的数据框如下所示:

ID    A     B     C      D    weight
1    0.5    2     a      1     1.0
2    0.3    3     b      2     0.35
2    0.6    5     c      3     0.55
3    0.4    2     d      4     0.9

我需要它将ID = 2的A,B列合并为加权平均值(A为0.3 * 0.35 + 0.6 * 0.55,B为3 * 0.35 + 5 * 0.55)。对于列C,我需要选择与最高权重相关的值(C = c表示ID = 2),列D表示最大值(在这种情况下D = 3),最终权重作为总和重量(0.35 + 0.55)。基本上,我需要为每一行分配几个不同的规则以获取重复的ID,我还没有找到如何做到这一点。

我使用python我相信熊猫是最好的,但我只是一个初学者,所以我会倾听并尝试你建议的任何事情!

非常感谢!

1 个答案:

答案 0 :(得分:0)

import pandas as pd       
a = pd.read_clipboard()

def agg_func(x):
    x.A = x.A*x.weight
    x.B = x.B*x.weight    
    return pd.Series([x.A.sum(), x.B.sum(), x.C[x.weight.idxmax()], x.D.max(), x.weight.max()], index=x.columns[1:])

print(a.groupby('ID').apply(agg_func))

        A    B  C  D  weight
ID
1   0.500  2.0  a  1    1.00
2   0.435  3.8  c  3    0.55
3   0.360  1.8  d  4    0.90

这应该进行工作检查http://pandas.pydata.org/pandas-docs/stable/groupby.html以了解更多信息。