【问题标题】:Pandas duplicate rows to unique rows with weight熊猫将行复制到具有权重的唯一行
【发布时间】:2015-11-12 12:17:17
【问题描述】:

我正在尝试合并一个数据框中的行,其中我有一个 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 列,我需要选择与最高权重关联的值(ID=2 时为 C=c),D 列是最大值(在这种情况下为 D=3),最终权重作为所有权重的总和( 0.35+0.55)。基本上,我需要为重复 ID 的每一行分配几个不同的规则,我还没有找到如何做到这一点。

我正在使用python我相信pandas是最适合这个的,但我只是这里的初学者,所以我会倾听并尝试你的任何建议!

非常感谢!

【问题讨论】:

    标签: python pandas duplicates row rules


    【解决方案1】:
    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 以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2018-03-19
      • 2018-12-10
      • 2016-07-01
      • 2022-01-22
      • 2020-04-13
      • 2016-07-06
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多