如何在Pandas DataFrame中生成包含其他行数据的新列
提取同行评审中另一位评审的分数
针对你的需求,这里提供两种简洁的Pandas实现方案,均能保留原有所有列:
方法一:利用分组求和(推荐)
该方法通过计算每个被评审者(reviewee)的总分,减去当前评审者的分数,直接得到另一位评审者的打分。优势是不依赖行顺序,且能自然处理两位评审分数相同的场景:
import pandas as pd # 原始数据 data = {'reviewer': ['A', 'B', 'C', 'D', 'E', 'F'], 'reviewee':['G','G','H','H','I','I'], 'reviewer score of reviewee':[1,2,0,0,1,2]} df = pd.DataFrame(data) # 生成新列 df['other reviewer score of reviewee'] = df.groupby('reviewee')['reviewer score of reviewee'].transform('sum') - df['reviewer score of reviewee'] print(df)
输出结果与预期完全一致:
reviewer reviewee reviewer score of reviewee other reviewer score of reviewee 0 A G 1 2 1 B G 2 1 2 C H 0 0 3 D H 0 0 4 E I 1 2 5 F I 2 1
方法二:组内行交换
如果能保证每个reviewee对应的两行是连续排列的,可以用组内位移的方式交换分数:
df['other reviewer score of reviewee'] = df.groupby('reviewee')['reviewer score of reviewee'].transform( lambda x: x.shift(-1).fillna(x.shift(1)) )
该方法通过shift(-1)取组内下一行的分数,最后一行用shift(1)补上上一行的分数,实现组内分数互换。但缺点是依赖行的排列顺序,若组内行顺序被打乱则会出错。
内容的提问来源于stack exchange,提问作者Maria Dresser
相关产品推荐
相关产品推荐

