如何在pandas数据框中添加一个新列,该列计算多行中每行的前5个值的平均值。
import pandas as pd
import random
random.seed(0)
df = pd.DataFrame({
'A': random.choices(range(10), k=10),
'B': random.choices(range(10), k=10),
'C': random.choices(range(10), k=10),
'D': random.choices(range(10), k=10),
'E': random.choices(range(10), k=10),
'F': random.choices(range(10), k=10),
'G': random.choices(range(10), k=10),
'H': random.choices(range(10), k=10),
'I': random.choices(range(10), k=10),
'J': random.choices(range(10), k=10)})
在MS Excel中,我们可以简单地通过使用公式来实现它。=平均值(大(B2:K2,{1,2,3,4,5}))
我尝试了几种方法,如nlargest(),将DF转置并将DF写入Excel,手动计算平均值,然后再次将其阅读为DF,但这不是最佳解决方案。
top_5_average = df['A'].nlargest(5).mean()
3条答案
按热度按时间mbjcgjjk1#
除非你有成千上万的列,一个有效的向量方法是对每一行进行排序,并对最后5列取平均值:
现在,你可以通过用
np.partition
代替sort来改进这种方法,使其在线性时间内运行:输出量:
如果你想模仿
nlargest
的keep='all'
选项的行为(对于第一行,它将是[8, 8, 8, 8, 9, 9]
的平均值),使用掩码来获取所有大于或等于第5个秩的值:输出量:
epggiuax2#
1tu0hz3e3#
一种方法是对每行中的值进行降序排列,然后只选择排名小于或等于5的值。然后你可以取它们的平均值:
输出量: