我的数据框包含三列
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
但不确定如何包含第二列。
答案 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
这给了我们正确的分母。