我在网上找到了下面的示例,它解释了如何从本质上实现PARTITIONBY的SQL等价物
df['percent_of_points'] = df.groupby('team')['points'].transform(lambda x: x/x.sum())
#view updated DataFrame
print(df)
team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562
我很难理解lambda函数lambda x中的'x'指的是什么:x/x.sum(),因为当用作分子时,它看起来是指单个元素,即“x”,但当用作分母时,它看起来是值的列表,即x.sum()。
我想我没有思考这是在正确的方式或有差距,在我的理解Python或Pandas。
1条答案
按热度按时间pgx2nnw81#
当用作分子即“x”时,它看起来是指单个元素,但当用作分母即x时,它也看起来是值的列表。sum()
它不会,它返回一个长度为
pd.Series
的大小的组,而x / x.sum()
不是一个单一的值,它返回一个同样大小的pd.Series
。.transform
会将此序列的值指派给group-by作业中该数据行的Map值。因此,请考虑: