熊猫组与其他栏的比例

时间:2015-10-01 21:11:59

标签: python pandas

我的数据框包含三列

df = pd.DataFrame({'col1': ['a','a','b','b'], 'col2':['a','b','c','d'], 'col3': [1,2,3,4]})

我想获得第一列定义的组中第三列的比例,但我还想继承第二列中的值,所以我可以得到这样的结果:

  col1     col2      col3
0    a        a  0.333333
1    a        b  0.666667
2    b        c  0.428571
3    b        d  0.571429

我可以使用group / apply来做比例:

df.groupby('col1').apply(lambda l: l.col3 / l.col3.sum()).reset_index()
  col1  level_1      col3
0    a        0  0.333333
1    a        1  0.666667
2    b        2  0.428571
3    b        3  0.571429

但不确定如何包含第二列。

1 个答案:

答案 0 :(得分:2)

我不确定"来自第二列的值是什么""意味着,但是你不希望IIUC从你的最终输出中遗漏这些值。在这种情况下,不要摆脱它们:

>>> df["col3"] = df["col3"] / df.groupby("col1")["col3"].transform(sum)
>>> df
  col1 col2      col3
0    a    a  0.333333
1    a    b  0.666667
2    b    c  0.428571
3    b    d  0.571429

我们已经使用transform,这意味着"执行groupby操作,然后将结果广播回原始索引":

>>> df.groupby("col1")["col3"].transform(sum)
0    3
1    3
2    7
3    7
dtype: int64

这给了我们正确的分母。