python - 如何为熊猫数据框中的切片分配值
问题描述
我必须根据状态为特定行重新分配列值。我正在使用的数据框只有两列,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 个“是”值,但我得到的只是“否”值(该列的默认值)。我不清楚为什么会这样。
解决方案
由于各种原因,我建议不要重复索引。这种情况是一种,因为您更难更新行。这是我要做的:
# 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'
推荐阅读
- typescript - NestJS 仅将 ClassSerializerInterceptor 应用于响应数据
- c++ - C ++中的动态嵌套数组导致无法将大括号括起来的初始化列表转换为int
- yaml - 如何在 OpenAPI3 中表示混合类型的数组?
- python - 如何将 MacOS 上的 pygame 安装到非默认 Python 3 中?
- scala - 读取具有不同列顺序的文件
- windows-10 - 安装 Chocolatey 失败(尝试在 Windows 10 上完整安装 NativeScript)
- linux - Cassandra - 无法删除行
- openmdao - 求解器选择:NonlinearBlockGS vs NewtonSolver
- reactjs - React js文本不适合屏幕
- asp.net-core - 当我尝试在 azure 上运行我的 asp.net core 3.1 应用程序时出现错误 500.30