You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas按分类条件复制列数值到新列报ValueError问题咨询

报错原因

错误出在df.loc[x, 'peak'] = df.b.iloc[[x]]这一行:

  • 你使用df.b.iloc[[x]](双层方括号包裹下标)返回的是带索引的Series序列对象,但df.loc[x, 'peak']定位的是单个单元格,只能接收标量值,二者类型不兼容因此触发报错。
  • 额外补充:代码中if x == df.index[x]的判断是冗余的,你当前生成的DataFrame默认使用从0开始的连续整数索引,argrelmax/argrelmin返回的就是数值对应的行下标,和索引值完全一致,不需要额外判断。
修复方案

只需要把取数的双层方括号改为单层,直接取对应位置的标量值即可,修改后的完整代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import argrelmax, argrelmin

# 生成模拟数据集
data = np.random.randint(0, 100,(25, 2))
df = pd.DataFrame(data , columns=['a', 'b'])

# 标记峰值
peak = argrelmax(data = np.array(df.b), axis=0, order=2, mode='clip')[0]
for x in peak:
    df.loc[x, 'value'] = 'peak'
    df.loc[x, 'peak'] = df.b.iloc[x] # 把[[x]]改为[x]取标量

# 标记谷值
trough = argrelmin(data = np.array(df.b), axis=0, order=2, mode='clip')[0]
for x in trough:
    df.loc[x, 'value'] = 'trough'
    df.loc[x, 'trough'] = df.b.iloc[x] # 同上修改

# 可选:把peak、trough列的空值替换为空字符串,方便后续查看
df[['peak', 'trough']] = df[['peak', 'trough']].fillna('')

print(df)

内容的提问来源于stack exchange,提问作者Sayed Gouda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:06:02