我必须根据状态重新分配特定行的列值。我正在使用的数据框只有两列,即SET VALUE和AMOUNT,其中STATE位于索引中。对于每个状态的AMOUNT列中值最高的3个客户,我需要将SET VALUE的值更改为“ YES”。我如何在熊猫框架中做到这一点?
我尝试对索引中的状态使用for循环,然后按AMOUNT列值进行排序,并在SET VALUE列的前三行中分配“ YES”。
for state in trial.index:
trial[trial.index == state].sort_values('AMOUNT', ascending = False)['SET VALUE'].iloc[0:3] = 'YES'
print(trial[trial.index == state])
我希望此循环的打印部分包括3个“是”值,但我得到的只是“否”值(该列的默认值)。我不清楚为什么会这样。
答案 0 :(得分:0)
出于各种原因,我建议不要重复索引。这种情况是一种,因为您很难更新行。这就是我要做的:
# make STATE a column, and index continuous numbers
df = df.reset_index()
# get the actual indexes of the largest amounts
idx = df.groupby('STATE').AMOUNT.nlargest(3).index.get_level_values(1)
# update
df.loc[idx, 'SET_VALUE'] = 'YES'