Pandas:添加一个新列,计算每个人当天最高分数达到的次数

5

这是一个pandas/Dataframe,它包含每个人每天的所有分数,我想要添加一列来收集最高分出现的次数(可能有多个人并且某些数据为nan)。

import pandas as pd
import numpy as np

data = np.array([['','day1','day2','day3','day4','day5'],
                ['larry',1,4,7,3,5],
                ['niko',2,-1,3,6,4],
                ['tin',np.nan,5,5, 6,7]])
                
df = pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])
print(df)

输出

      day1 day2 day3 day4 day5
larry    1    4    7    3    5
niko     2   -1    3    6    4
tin    nan    5    5    6    7

预期结果为 (larry: 1 次,niko: 2 次,tin: 3 次)

      times_of_top day1 day2 day3 day4 day5
larry            1    1    4    7    3    5
niko             2    2   -1    3    6    4
tin              3  nan    5    5    6    7

nikoday1day4 上获得最高分,因此他的 times_of_top 值为 2。
tinday2day4day5 上获得最高分,因此他的 times_of_top 值为 3。

1个回答

5

使用 pandas.DataFrame.stackcount 的一种方法:

# df = df.astype(float)
# Since the sample data are in object type

df["times_of_top"] = df[df == df.max()].stack().count(0)
print(df)

输出:

       day1  day2  day3  day4  day5  times_of_top
larry   1.0   4.0   7.0   3.0   5.0             1
niko    2.0  -1.0   3.0   6.0   4.0             2
tin     NaN   5.0   5.0   6.0   7.0             3

1
@LarryCai - 你按评论中所说的转换成浮点数了吗? - Patrick Artner
1
不,但是好的,Chris可以更新它。 - Larry Cai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接