python - 在某些值之间替换 df 中的值(将 >1 到 4 替换为 1)
问题描述
我想用另一个值替换 df 中的某些值阈值。例如,所有介于 1 和 <3.3 之间的值都应总结为 1。然后,所有介于 >=3.3 和 <10 之间的值都应总结为 2,依此类推。
我试过这样: tndf 是我的 df 和 tnn 列
tndf.loc[(tndf.tnn < 1), 'tnn'] = 0
tndf.loc[((tndf.tnn >= 1) | (tndf.tnn < 3.3)), 'tnn'] = 1
tndf.loc[((tndf.tnn >=3.3) | (tndf.tnn < 10)), 'tnn'] = 2
tndf.loc[((tndf.tnn >=10) | (tndf.tnn < 20)), 'tnn'] = 3
tndf.loc[((tndf.tnn >=20) | (tndf.tnn < 33.3)), 'tnn'] = 4
tndf.loc[((tndf.tnn >=33.3) | (tndf.tnn < 50)), 'tnn'] = 5
tndf.loc[((tndf.tnn >=50) | (tndf.tnn < 100)), 'tnn'] = 6
tndf.loc[(tndf.tnn == 100), 'tnn'] = 7
但是最后的每个值都将被总结为 6。我认为这就是为什么因为每个条件的第二部分。但我不知道如何告诉程序只查看特定范围(例如从 >=3.3 和 <10)。
解决方案
要形成这样的类别,请使用pd.cut
pd.cut(df.tnn, [0, 1, 3.3, 10, 20, 33.3, 50, 100], right=False, labels=range(0, 7))
的样本输出pd.cut
tnn cat
0 76.518227 6
1 44.808386 5
2 46.798994 5
3 70.798699 6
4 67.301112 6
5 13.701745 3
6 47.310570 5
7 74.048936 6
8 37.904632 5
9 38.617358 5
或者
使用np.select
. 它完全适合您的用例。
conditions = [tndf.tnn < 1, (tndf.tnn >= 1) | (tndf.tnn < 3.3)]
values = [0, 1]
np.select(conditions, values, default="unknown")
推荐阅读
- python - 如何用列中的日期替换 nan 值?
- postgresql - Heroku Postgres - 突然出现错误
- struct - Solidity将项目添加到结构中的嵌套数组
- sql-server - 如何使用实体框架更新一个事务中的选定记录?
- c# - 为什么本机编译失败但没有 C# 错误(NotificationManager 继承)
- ms-word - 在 MS Word 中编辑参考书目样式 - 如何更改文本中使用的元素和括号的顺序?
- java - 如何将 ShimmerFrameLayout 与 ImageView 一起使用
- arrays - 如何在反应js中映射另一个数组内的数组?
- firebase - Phone Number in Firebase Authentication Flutter
- javascript - 如何在 ReactJs 中处理按钮数组处理单击事件