我有以下運動員參加比賽的資料框。
pos country year round event athlete Battle
1 Jamaica 2012 100m Beijing BOLT 0
2 Jamaica 2012 100m Beijing BLAKE 0
4 USA 2012 100m Beijing GAY 0
3 USA 2012 100m Beijing JOHN 0
6 Jamaica 2012 200m Beijing BOLT 0
7 Jamaica 2012 200m Beijing BLAKE 0
3 USA 2012 200m Beijing GAY 0
4 USA 2012 200m Beijing JOHN 0
我想為“戰斗”列分配值,表示運動員獲得更高的網格點。像這樣的東西:
pos country year round event athlete Battle
1 Jamaica 2012 100m Beijing BOLT 1
2 Jamaica 2012 100m Beijing BLAKE 0
4 USA 2012 100m Beijing GAY 0
3 USA 2012 100m Beijing JOHN 1
6 Jamaica 2012 200m Beijing BOLT 2
7 Jamaica 2012 200m Beijing BLAKE 0
3 USA 2012 200m Beijing GAY 1
4 USA 2012 200m Beijing JOHN 1
博爾特在兩場比賽中的位置都比布萊克好,所以他battle在兩輪比賽后的價值將是 2,而布萊克的零分。蓋伊和約翰在兩場比賽中的一場比賽中表現更好,因此他們的值為 1 和 1。
如何計算Battle熊貓中的列?我不知道從哪里開始。我查看了其他問題,其中包括我自己的例如為另一列中的唯一值分配值給熊貓資料框值和比較兩個不同熊貓列中的值,但這些比較和/或操作跨越兩列,而我想要的結果迫使我考慮(year, round, event, country)必須是公共的多個列,并在athlete列中找到唯一值并進行比較。
我試圖通過country使用來隔離運動員df.groupby(['country', 'round', 'pos']).apply(lambda x: x['athlete'])
country round pos athlete
Jamaica 100m 1 BOLT
2 BLAKE
USA 100m 4 GAY
3 JOHN
Jamaica 200m 6 BOLT
7 BLAKE
USA 200m 3 GAY
4 JOHN
雖然這隔離了重要資訊,但我仍然對如何比較它們的位置感到困惑。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
IIUC,您可以:
groupby國家和回合,并對運動員進行排名,看看他們有多少其他運動員表現出色。groupby運動員和總和。
df["rank"] = df.groupby(["country", "round"])["pos"].transform(pd.Series.rank, ascending=False, method="dense")-1
df["Battle"] = df.groupby("athlete")["rank"].transform(sum)
>>> df.drop("rank", axis=1)
pos country year round event athlete Battle
0 1 Jamaica 2012 100m Beijing BOLT 2.0
1 2 Jamaica 2012 100m Beijing BLAKE 0.0
2 4 USA 2012 100m Beijing GAY 1.0
3 3 USA 2012 100m Beijing JOHN 1.0
4 6 Jamaica 2012 200m Beijing BOLT 2.0
5 7 Jamaica 2012 200m Beijing BLAKE 0.0
6 3 USA 2012 200m Beijing GAY 1.0
7 4 USA 2012 200m Beijing JOHN 1.0
?~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340522.html
