我在網上找到了以下示例,它解釋了如何從本質上實作與 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
我很難理解 lambda 函式 lambda x: x/x.sum() 中的“x”指的是什么,因為它在用作分子時似乎指的是單個元素,即“x”,但也似乎是一個串列用作分母 iexsum() 時的值。
我認為我認為這是不正確的方式,或者我對 python 或 pandas 的理解存在差距。
uj5u.com熱心網友回復:
當用作分子即“x”時,它似乎是指單個元素,但當用作分母時,它似乎是一個值串列 iexsum()
它沒有,它回傳一個pd.Series長度為組大小的值,并且x / x.sum()不是單個值,它具有pd.Series相同的大小。
.transform會將這個系列的值分配給分組操作中該列中的相應值。
所以,考慮:
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]:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/534254.html
