我有一个矩阵,看起来像这样:
[[1.10629335 0. 2.21258671 ... 0. 0. 0. ]
[0. 0. 0. ... 0. 0. 0. ]
[1.25571599 1.25571599 0. ... 0. 0. 0. ]
...
[1. 1.41956932 1.49244153 ... 0. 0. 0. ]
[0. 0. 0. ... 2.10342705 0. 1.05171352]
[0. 0. 0. ... 0. 0. 0. ]]
我要遍历每一行,检查条目是否小于1,如果小于1,则取该条目并将条目添加到其右侧。例如, 如果我有
[[ 0.5 , 1]
[0 , 0]]
第一个条目是0.5,小于0,因此我们现在有
[[ 1.5 , 1]
[0 , 0]]
我认为这个例子比较清楚。现在我该如何把它应用到我所有的矩阵中呢?你知道吗
这就是我所尝试的:
def modify_PITI_nums(adjusted_PITI_nums1):
for i in range(1,col_num):
if adjusted_PITI_nums1.iloc[0][i] <1:
return adjusted_PITI_nums1.iloc[:,i]+ (adjusted_PITI_nums1.iloc[:,i+1] -1)
else:
return adjusted_PITI_nums1.iloc[:,i]
adjusted_PITI_nums1.apply(lambda row: modify_PITI_nums(row['nper_0']), axis = 1)
但我有个错误:
AttributeError: ("'numpy.float64' object has no attribute 'iloc'", 'occurred at index a1')
请注意,adjusted_PITI_nums1
是一个数据帧,其矩阵内容和头如下所示:
以下是一个仅适用于NumPy的解决方案:
注意:这种方法假设特定列中的所有值都小于右侧的值。你知道吗
举个例子:
输入:
提供:
注意第2列中的输入。你知道吗
Edit:
DataFrame.transform()
是一个更好的候选者,因为它不会创建新的数据帧。同样,类似于kmario23
的并行工作:相关问题 更多 >
编程相关推荐