gpt4 book ai didi

python - 根据另一个子级列的位置在子级添加一个列

转载 作者:行者123 更新时间:2023-11-28 17:01:41 24 4
gpt4 key购买 nike

我有以下 Pandas 数据框(df):

quarters = ['first_q', 'second_q', 'third_q', 'fourth_q']
columns = pd.MultiIndex.from_product([quarters, ['points']])
df = pd.DataFrame([[5, 13, 6, 12], [7,5,5,14], [3,0,7,4]], index=['curry', 'lebron','stockton'], columns=columns)

Out[]:
first_q second_q third_q fourth_q
points points points points
curry 5 13 6 12
lebron 7 5 5 14
stockton 3 0 7 4

我想在第 1 级(“点数”旁边)创建一个新列,其中包含每个球员的(指数)注释(列,第 1 级“点数”)在每个季度(第 0 列,第 0 级)的排名.换句话说,预期的结果是:

          first_q         second_q        third_q        fourth_q
points ranking points ranking points ranking points ranking
curry 5 2 13 1 6 2 12 2
lebron 7 1 5 2 5 3 14 1
stockton 3 3 0 3 7 1 4 3

first_q level-0列中的ranking level-1列表示lebron第一节得分最高,紧随其后currystockton 在该季度结束时排名第三。

我已经通过以下代码成功实现了这个结果:

for quarter in quarters:
df = df.sort_values([(quarter, 'points')], ascending=False)
df.loc[:,(quarter,'ranking')] = np.arange(1, 4)
df = df[quarters]
df = df.reindex(['curry', 'lebron', 'stockton'])

但是,我试图找到一种更优雅/惯用的方法来实现这一点,而无需在 quarters 上进行 for 迭代,但我还没有找到任何方法。

有人知道如何实现吗?

提前致谢!

最佳答案

使用rankconcat:

v = ((len(df) + 1 - df.rank(method='dense'))
.rename({'points':'rank'}, axis=1)
.astype(int))

pd.concat([df, v], axis=1).sort_index(axis=1)

first_q fourth_q second_q third_q
points rank points rank points rank points rank
curry 5 2 12 2 13 1 6 2
lebron 7 1 14 1 5 2 5 3
stockton 3 3 4 3 0 3 7 1

关于python - 根据另一个子级列的位置在子级添加一个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com