我有一个数据框,根据一列的值(正值或负值)将其分为 2 个子集。
假设一列包含以下值:
1
4
9
2
1
我基本上想在每个子集中创建一列,计算一个值与之前的值之间的差异。所以它会在这里给出如下内容:
n/a
3
5
-7
-1
然后我只想将值移到上面一行。我使用了下面的代码,最终给出了结果,但我总是收到这个我不明白的警告。 “尝试在 DataFrame 的切片副本上设置一个值。 尝试使用 .loc[row_indexer,col_indexer] = value 代替” 你能帮忙吗?
df_left = df_s[df_s['Benchmark Sigma'] < 0]
df_right = df_s[df_s['Benchmark Sigma'] > 0]
df_left['Benchmark Sigma Interval'] = (df_left['Benchmark Sigma']-df_left['Benchmark Sigma'].shift(1))
df_right['Benchmark Sigma Interval'] = (df_right['Benchmark Sigma']-df_right['Benchmark Sigma'].shift(1))
df_left['Benchmark Sigma Interval']=df_left['Benchmark Sigma Interval'].shift(-1)
df_right['Benchmark Sigma Interval']=df_right['Benchmark Sigma Interval'].shift(-1)
最佳答案
此警告只是让您知道您可能正在修改 df 的副本而不是原始文件。根据我的经验,这通常是误报。如果您发现自己也遇到这种情况,可以关闭警告。
有关详细信息,请参阅this post ,尤其是 @Garrett 提供的链接。
关于Python 对列的操作和 "copy of a slice from a DataFrame"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43203204/