首页 > 解决方案 > 如何为熊猫数据框中的切片分配值

问题描述

我必须根据状态为特定行重新分配列值。我正在使用的数据框只有两列,SET VALUE 和 AMOUNT,其中 STATE 在索引中。对于每个州的 AMOUNT 列中具有最高值的 3 个客户,我需要将 SET VALUE 的值更改为“YES”。我怎样才能在熊猫框架中做到这一点?

我试图对索引中的状态使用 for 循环,然后按 AMOUNT 列值排序,并将“YES”分配给 SET VALUE 列中的前三行。

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 个“是”值,但我得到的只是“否”值(该列的默认值)。我不清楚为什么会这样。

标签: pythonpandas

解决方案


由于各种原因,我建议不要重复索引。这种情况是一种,因为您更难更新行。这是我要做的:

# 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'

推荐阅读