首页 > 解决方案 > 如何按索引对数据框列进行操作

问题描述

根据我在 StackOverflow 上收到的建议,我认为我在使用 Pandas 数据帧时已经解决了我的“CopyWithWarning”问题,但它们又回来咬我了。我正在尝试在数据框中创建一个新列,它是另一列的第一个区别:

df[upper_sys_hrt] = df[idx_upper] - df[idx_upper].shift(1)
df[upper_sys_hrt].iloc[0] = d[upper_sys_hrt].iloc[1]

这有时(并非总是)给我一个CopyWithWarning错误。我尝试将其更改为

df[ : , df.get_loc(upper_sys_hrt)] =  df[ : , df.columns.get_loc(idx_upper)] - df[: , df.columns.get_loc(idx_upper)].shift(1)

但我得到的只是一条错误消息:

TypeError: '(slice(1, None, None), 3)' is an invalid key

我已经尝试(狩猎和啄食)对语法以及谷歌搜索进行更改,但一无所获。我究竟做错了什么?

标签: pythonpandas

解决方案


你有列的位置,而不是标签。要获取标签,请重新索引df.columns

col = df.columns[df.get_loc(upper_sys_hrt)]
df[col] = df[col] - df[col].shift()

要不就

df[col] = df[col].diff()

如果您更喜欢使用索引,则可以使用iloc

idx = df.get_loc(upper_sys_hrt)
df.iloc[:,idx] = df.iloc[:,idx].diff()

推荐阅读