我有一个数据框test
,我想更改其元素。具体来说,我想更改数据框的scale
列中的值,对除具有最大mPower
值的行之外的每一行进行迭代。我希望比例值成为最大的mPower
值除以当前行的mPower
值。下面是一个小的示例数据框:
test = pd.DataFrame({'psnum':[0,1],'scale':[1,1],'mPower':[4.89842,5.67239]})
我的代码如下:
for index, row in test.iterrows():
if(test['psnum'][row] != bigps):
s = morepower/test['mPower'][row]
test.at[:,'scale'][row] = round(s,2)
其中bigps = 1
(即psnum
列中具有最大mPower
值的值)和morepower = 5.67239
(即{{1}中最大的值) mPower
数据框的}列)。
运行此代码时,出现错误:“ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a 。所有()。”我现在已经尝试了几种不同的方法,其中大多数都以错误结尾或在数据框中没有任何更改。
所以最后,我需要这样的test
数据框:
test
对此事有任何见识,不胜感激!
答案 0 :(得分:1)
这正是向量化熊猫非常适合的一种。您可以使用数学运算并立即将其广播到整列中,而不必完全循环。
n - 1
答案 1 :(得分:0)
请尝试以下方法:
for index, row in test.iterrows():
if(test.iloc[index]['psnum'] != bigps):
s = morepower/test.iloc[index]['mPower']
test.at[index,'scale'] = round(s,2)
答案 2 :(得分:0)
不要使用循环。使用vetorized操作。在这种情况下,我使用系列where
test['scale'] = test['scale'].where(test.mPower == test.mPower.max(), test.mPower.max()/test.mPower)
Out[652]:
mPower psnum scale
0 4.89842 0 1.158004
1 5.67239 1 1.000000