首页 > 解决方案 > 如何从每行 4 列获取 Max 中迭代 5 行并相应地设置不同列的值

问题描述

我有一个DataFrame,我从 df1 制作了 4 列的子集 df2,并创建了一个包含每行最大值的 5 个项目的列表。现在,根据该行的最大值位于哪一列,即第 1、2、3、4 列,确定 df1 中标签列中的 int 标签,即 1、2、3 或 4。

df2 是因为不包括这 4 列的其他一些列的值高于要比较的 4 列,并且显然将其搞砸了。开始认为它应该是一个列表或系列?

代码

df1= pd.DataFrame({'x_1': [xvalues[0][0], xvalues[0][1], xvalues[0][2], 
                          xvalues[0][3], xvalues[0][4]], 
                  'x_2': [yvalues[0][0], yvalues[0][1], yvalues[0][2], 
                          yvalues[0][3], yvalues[0][4]],
                  'True labels': [truelabels[0], truelabels[1], 
                               truelabels[2],truelabels[3], truelabels[4]],
                  'g11': [classifier1[0][0],classifier1[0][1],
                          classifier1[0][2],classifier1[0][3],
                          classifier1[0][4],],
                  'g12': [classifier1[1][0],classifier1[1][1],
                          classifier1[1][2],classifier1[1][3],
                          classifier1[1][4],],
                  'g13': [classifier1[2][0],classifier1[2][1],
                          classifier1[2][2],classifier1[2][3],
                          classifier1[2][4],],
                  'g14': [classifier1[3][0],classifier1[3][1],
                          classifier1[3][2],classifier1[3][3],
                          classifier1[3][4],],
                  'L1': [2, 5, 6, 7, 8],
                  'g21': [classifier2[0][0],classifier2[0][1],
                          classifier2[0][2],classifier2[0][3],
                          classifier2[0][4],],
                  'g22': [classifier2[1][0],classifier2[1][1],
                          classifier2[1][2],classifier2[1][3],
                          classifier2[1][4],],
                  'g23': [classifier2[2][0],classifier2[2][1],
                          classifier2[2][2],classifier2[2][3],
                          classifier2[2][4],],
                  'g24': [classifier2[3][0],classifier2[3][1],
                          classifier2[3][2],classifier2[3][3],
                          classifier2[3][4],],
                  'L2': [0, 0, 0, 0, 0],
                  'g31': [classifier3[0],classifier3[0],
                          classifier3[0],classifier3[0],
                          classifier3[0],],
                  'g32': [classifier3[1][0],classifier3[1][1],
                          classifier3[1][2],classifier3[1][3],
                          classifier3[1][4],],
                  'g33': [classifier3[2][0],classifier3[2][1],
                          classifier3[2][2],classifier3[2][3],
                          classifier3[2][4],],
                  'g34': [classifier3[3][0],classifier3[3][1],
                          classifier3[3][2],classifier3[3][3],
                          classifier3[3][4],],
                  'L3': [0, 0, 0, 0, 0],
                  'Assigned L':[1, 1, 1, 1,1]}, index =['Datapoint1', 'D2', 'D3', 
                                                        'D4', 'D5'])



df2= df1[['g11','g12','g13','g14']]
hdf = df2.max(axis = 1)

g11 = df1['g11'].to_list()
g12 = df1['g12'].to_list()
g13 = df1['g13'].to_list()
g14 = df1['g14'].to_list()



for item, label in zip(hdf, table['L1']):
    if hdf[item] in g11:
        df1['L1'][label] = labels[0]
        print(item, label)
    elif hdf[item] in g12:
        df1['L1'][label] = labels[1]
        print(item, label)
    elif hdf[item] in g13:
        df1['L1'][label] = labels[2]
        print(item, label)
    elif hdf[item] in g14:
        df1['L1'][label] = labels[3]
        print(item, label)

我尝试过使用.loc.at但是当它不起作用时,我只是将其报废并尝试了其他方法,也许这些方法会更好?这就是我目前所处的位置。

错误来自 hdf 的 for 循环,我遇到的问题是"cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0.0311272081] of <class 'float'>"

我不认为数据框中的其他值是相关的,它就在那里,所以人们知道我已经做了一个。数据框中的 5 个相关列是 g11、g12、g13、g14 和 L1。

标签: pythonpandasdataframe

解决方案


推荐阅读