当传递lambda问题时,Python Pandas如何在内部工作?



我在网上找到了下面的例子,它解释了如何从本质上实现与PARTITION BY

相当的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

我很难理解'x'在lambda函数lambda x: x/x.m sum()中指的是什么,因为当用作分子时,它似乎指的是单个元素,即。'x',但当用作分母时,也似乎是一个值列表,即x.p sum()。

我想我的思考方式不对,或者我对蟒蛇或熊猫的理解有差距。

当它被用作分子即。'x',但在使用时也似乎是一个值列表作为分母,即x.sum()

它没有,它返回一个长度与组的大小相同的pd.Series,并且x / x.sum()不是一个单一值,它是一个相同大小的pd.Series

.transform将此系列的值分配给group-by操作中该列中的相应值。

所以,考虑:

In [15]: df
Out[15]:
team  points
0    A      30
1    A      22
2    A      19
3    A      14
4    B      14
5    B      11
6    B      20
7    B      28
In [16]: for k, g in df.groupby('team')['points']:
...:     print(g)
...:     print(g / g.sum())
...:
0    30
1    22
2    19
3    14
Name: points, dtype: int64
0    0.352941
1    0.258824
2    0.223529
3    0.164706
Name: points, dtype: float64
4    14
5    11
6    20
7    28
Name: points, dtype: int64
4    0.191781
5    0.150685
6    0.273973
7    0.383562
Name: points, dtype: float64
In [17]:

最新更新