熊猫数据处理

时间:2020-03-25 20:01:21

标签: python pandas data-manipulation

我有一个矩阵,其中的行是一些项目编号,列是某些功能的得分,称为score1,score2等。我想创建3个新列,分别称为out1,out2和out3;其中out1,out2或out3获得值1(score1),2(score2)或3(score3)。规则如下,请查看矩阵的示例图片 image of an example as I am not yet allowed to post pictures

  1. 项目得分最高的列将放入out1
  2. 如果有平局,没有最高分,那么所有出局都将留空
  3. 如果最高得分与第二最高得分之间的差值小于或等于2,则将该得分放入out2
  4. 如果out2的得分之间没有平局,则out2和out3将为空白
  5. 如果第二高分和第三高分之差小于等于2,则将该得分放入out3
  6. 如果out3的得分之间有平局,则out3将为空白

这是一个玩具矩阵

df = pd.DataFrame({'items':['item1', 'item2', 'item3', 'item4', 'item-n'],
                  'score0':[11,2,3,10,10],
                  'score1':[6,4,6,6,9],
                  'score2':[9,8,6,8,8],
                  'score-n':[3,0,2,6,2]})

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

Stack Overflow不是为了解决您的家庭作业问题,而是要询问具体问题。无论如何,一个起点可能是删除“ items”列,并使用apply编写自己的书面功能:

def my_max(arr1d):
    return np.argmax(arr1d)

dfs = df.drop(["items"], axis=1)
col1 = dfs.apply(my_max, axis=1)

这里只是用您自己的函数替换argmax。