python - 如何从每行 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。
解决方案
推荐阅读
- python - 如何以主线程中的线程结束?
- semantic-ui - 如何在 onClose 事件中获取多选下拉组件中的选定值?
- postgresql - LibreOffice 基本列表框中缺少 FROM 子句错误
- json - WebApi2 默认 json 序列化程序不会抛出预期的异常
- sql-server - 如何将参数从 SQL 查询传递到 vb.net 函数?
- asp.net-core - 新 API 返回内部服务器错误
- ethereum - 由于合同本质上是永久性的,我是否需要始终使用 setter?
- java - Java MongoDB 传递连接参数
- html - 如何在模式中对齐列表元素的中心
- python - 我将如何将二维列表的内容复制到剪贴板,为 Excel 格式化?