python - 使用熊猫为具有特定条件的每一行设置列值
问题描述
这个问题与我之前问过的另一个问题非常相似:Pandas set value if most columns are equal in a dataframe
我有这个数据框:
NET_0 NET_1 NET_2 NET_3 NET_4 NET_5 NET_6
date
2009-08-02 2 2 2 2 2 0
2009-08-03 0 0 0 2 2 1
2009-08-04 1 1 1 0 1 2
我需要生成一个名为ensemble
遵循以下特定条件的新列:
a) 1 的计数低于特定阈值count(1) < 20%
(必须始终验证,阈值可以更改)
b) SET 2 如果 (a) 被验证并且 2 的数量大于 0 的数量的两倍count(2) > (2 * count(0))
c) 如果 (a) 被验证并且 0 的数量大于 2 的数量,则 SET 0count(0) > count(2)
这应该是我想要的结果:
date enseamble
2009-08-02 2
2009-08-03 0
2009-08-04 1
解决方案
使用numpy.select
with 比较所有值 by DataFrame.eq
,对于阈值使用mean
和对于 count True
s 值使用sum
:
#if necessary convert date to index
#df = df.set_index('date')
m1 = df.eq(1).mean(1) < 0.2
m2 = df.eq(2).sum(1) > 2 * df.eq(1).sum(1)
m3 = df.eq(0).sum(1) > df.eq(2).sum(1)
df['enseamble'] = np.select([m1 & m2, m1 & m3], [2,0], default=1)
print (df)
NET_0 NET_1 NET_2 NET_3 NET_4 NET_5 enseamble
date
2009-08-02 2 2 2 2 2 0 2
2009-08-03 0 0 0 2 2 1 0
2009-08-04 1 1 1 0 1 2 1
推荐阅读
- r - 在 R 中保存循环的输出(到数据帧中)
- javascript - 在 Next.JS 中获取站点 URL
- c# - 在 AWS 开发工具包中使用 AmazonSecurityTokenServiceClient 时出现 System.InvalidOperationException
- c++ - 检查枚举类是否包含特定标识符
- python - Scrapy 迭代 xpath 结果集
- tomcat - Tomcat 没有替换 server.xml 中的系统属性
- vba - 如何使用 VBA 更改 QR 码的高度和宽度?
- java - BluetoothServerSocket 是否总是使用端口 8?
- python-3.x - 拍摄帧截图的按钮
- reactjs - React 中状态更新后的 Axios 请求(在 url 中使用状态值)