python - 如何在 for 循环 if 语句中处理“SettingWithCopyWarning”
问题描述
假设 A 列是基于时间的,B 列是工资。
我在 for 循环中使用 if 语句,试图找到“所有低于前一个但也高于下一个的薪水”。然后将新值 ('YES') 分配给满足条件的行的另一列(C 列)。最后,我想获取满足上述条件的第一列 A。
数据框如下所示:
In [1]:
df = pd.DataFrame({'A':['2007q3','2007q4','2008q1','2008q2','2008q3','2008q4','2009q1','2009q2','2009q3'],
'B':[14938, 14991, 14899, 14963, 14891, 14577, 14375, 14355, 14402]})
df['C'] = pd.Series()
df
Out [1]:
A B C
0 2007q3 14938 NaN
1 2007q4 14991 NaN
2 2008q1 14899 NaN
3 2008q2 14963 NaN
4 2008q3 14891 NaN
5 2008q4 14577 NaN
6 2009q1 14375 NaN
7 2009q2 14355 NaN
8 2009q3 14402 NaN
以下代码可以工作,但显示“SettingWithCopyWarning”警告,我不确定代码的哪些部分导致了问题......
In [2]:
for i in range(1, len(df)-1):
if (df['B'][i] < df['B'][i-1]) & (df['B'][i] > df['B'][i+1]):
df['C'][i] = 'YES'
df
Out [2]:
A B C
0 2007q3 14938 NaN
1 2007q4 14991 NaN
2 2008q1 14899 NaN
3 2008q2 14963 NaN
4 2008q3 14891 YES
5 2008q4 14577 YES
6 2009q1 14375 YES
7 2009q2 14355 NaN
8 2009q3 14402 NaN
In [3]: df['A'][df['C'] == 'YES'].iloc[0]
Out [3]:'2008q3'
或者也许有更好的方法来完成工作。谢谢!!!
解决方案
推荐阅读
- python - 如何在python中几个文件的某些行的末尾添加一个字符串
- scala - 运行 scala 程序集 fat jar 时“找不到数据源:json”
- typeerror - (Python 3.8) TypeError: 'module' object is not callable
- javascript - 如何在 openlayers 中编辑点对象?
- linux - curl (56) Recv failure: Connection reset by peer with a simple docker run
- vue.js - 为什么我在 webpack-dev-server 重新编译时收到“.vue”文件的“找不到模块...”Typescript 错误?
- r - 比较两个数据帧的两列并找到未匹配项
- python - Python 3.7 和 PyCharm 的动态导入警告
- python - 如何在h5文件中打印文件夹名称
- javascript - 如何使用节点 js 在 vimeo 中上传文本轨道