【发布时间】:2022-11-25 07:57:28
【问题描述】:
我想添加一列以指示在每一行中哪个“分数”排名第一和第二的数据框。
import pandas as pd
from io import StringIO
csvfile = StringIO(
"""Name Department A_score B_score C_score D_score
Jason Finance 7 3 7 9
Jason Sales 2 2 9 2
Molly Operation 3 7 1 2
""")
df = pd.read_csv(csvfile, sep = '\t', engine='python')
# adding columns to indicate the ranks of A,B,C,D
df = df.join(df.rank(axis=1, ascending=False).astype(int).add_suffix('_rank'))
# returning the column headers that in [1, 2]
df_1 = df.apply(lambda x: x.isin([1,2]), axis=1).apply(lambda x: list(df.columns[x]), axis=1)
print (df_1)
# output as:
[A_score_rank, C_score_rank, D_score_rank]
[A_score, B_score, D_score, C_score_rank]
[C_score, D_score, A_score_rank, B_score_rank]
有两个问题
- 检查第一名和第二名时,它包括“分数”列,但我只想按“排名”列运行它们
- df_1 作为单独的数据帧出现,不是扩展原始数据帧的一部分
我该如何解决这些问题?
【问题讨论】: