python - Python更改列值 - 一次每一行
问题描述
我有一个具有以下列的数据框 df
A B C D
06/09/2019 56 67 33 10
06/10/2019 54 66 47 23
06/11/2019 67 1 43 19
06/12/2019 21 38 8 71
我有两个具有下限 (l) 和上限 (u) 的数据帧
lower_df:
l
06/09/2019 20
06/10/2019 12
06/11/2019 10
06/12/2019 15
上层_df:
u
06/09/2019 60
06/10/2019 70
06/11/2019 55
06/12/2019 50
我想使用两个数据帧(lower_df和upper_df)的值作为条件将第一个数据帧(df)列的值更新为0。这里每一行都是独立的,每一列都与相应的 u & l 值进行比较。小于 l 和大于 u 的值设置为零。
需要的结果:
A B C D
06/09/2019 56 0 33 0
06/10/2019 54 66 47 23
06/11/2019 0 0 43 19
06/12/2019 21 38 0 0
我正在使用以下代码从数据框中提取每一行并将列与此上限和下限进行比较:
for i in range(0,len(df)):
ul=upper_df.iloc[i]
ll=lower_df.iloc[i]
df.iloc[i][df.iloc[i]<ll[0]]=0
df.iloc[i][df.iloc[i]>ul[0]]=0
但这并没有反映任何变化, df 保持原样。代码是否正确?如果不是,那么正确的方法是什么。这个数据集很大(很多列,这是一个例子),我正在寻找一种更聪明的方法来做到这一点。
解决方案
使用DataFrame.mask
with compare byDataFrame.lt
和
DataFrame.gt
chained by|
按位OR
:
df = df.mask(df.lt(lower_df['l'], axis=0) | df.gt(upper_df['u'], axis=0), 0)
print (df)
A B C D
06/09/2019 56 0 33 0
06/10/2019 54 66 47 23
06/11/2019 0 0 43 19
06/12/2019 21 38 0 0
推荐阅读
- kubernetes - Helm卸载后如何在预安装挂钩和删除中创建秘密
- flutter - Flutter 的“audioplayers”依赖问题
- python - 领先的 mino Python 错误任何人都可以帮助我
- android - 如何摆脱 .apk 文件中不必要的代码?
- zsh - how to make information on a separate line and the command on a new line in zsh?
- new-operator - 启动“无标题脚本”时缺少“新”部分
- java - NullPointerException 使用 PageFactory
- r - 使用 R 中的最近邻为 SDM 预测的每个点分配一个营养值
- c# - 如何将图像从 http 客户端保存到 UWP 中的特定文件夹
- mysql - mysql数据库一下子变老了