python - pandas在一列中找到相似的行,根据条件新建一列
问题描述
我有一个 df,查询主题 HPSame
0 WP_77.1 WP_706.1 HPS_1
1 WP_78.1 WP_46.1 HPS_2
2 WP_57.1 WP_26.1 HPS_3
3 WP_57.1 WP_627.1 HPS_4
4 WP_15.1 WP_16.1 HPS_5
5 WP_15 .1 WP_17.1 HPS_6
6 WP_15.1 WP_63.1 HPS_7
7 WP_15.1 WP_61.1 HPS_8
8 WP_15.1 WP_56.1 HPS_9
9 WP_40.1 WP_11.1 HPS_10
我试过了,
df['query_s'] = df['query'].shift(-1)
df['HPSame_s'] = df['HPSame'].shift(-1)
condition = [(df['query'] == df['query_s'])]
ifTrue = df['HPSame']
ifFalse = df['HPSame_s']
df['match'] = np.where(condition, ifTrue, ifFalse)
这会抛出 ValueError:值的长度与索引的长度不匹配
我也尝试了以下但没有给我我想要的结果。
df.loc[(df['query'] == df['query_s']), 'match'] = df['HPSame']
df.loc[(df['query'] != df['query_s']), 'match'] = df['HPSame_s']
我正在寻找结果,df = 查询主题 HPSame 匹配 0 WP_77.1 WP_706.1 HPS_1 HPS_1 1 WP_78.1 WP_46.1 HPS_2 HPS_2 2 WP_57.1 WP_26.1 HPS_3 HPS_3 3 WP_57.1 WP_627.1 HPS_4 HPS_3 4 WP_15.1 WP_16.1 HPS_5 HPS_5 5 WP_15.1 WP_17.1 HPS_6 HPS_5 6 WP_15.1 WP_63.1 HPS_7 HPS_5 7 WP_15.1 WP_61.1 HPS_8 HPS_5 8 WP_15.1 WP_56.1 HPS_9 HPS_5 9 WP_40. 1 HPS_10 HPS_10
解决方案
您可以使用ffill
:
df['match'] = df['HPSame'].where(df['query'] != df['query'].shift()).ffill()
输出:
query subject HPSame match
0 WP_77.1 WP_706.1 HPS_1 HPS_1
1 WP_78.1 WP_46.1 HPS_2 HPS_2
2 WP_57.1 WP_26.1 HPS_3 HPS_3
3 WP_57.1 WP_627.1 HPS_4 HPS_3
4 WP_15.1 WP_16.1 HPS_5 HPS_5
5 WP_15.1 WP_17.1 HPS_6 HPS_5
6 WP_15.1 WP_63.1 HPS_7 HPS_5
7 WP_15.1 WP_61.1 HPS_8 HPS_5
8 WP_15.1 WP_56.1 HPS_9 HPS_5
9 WP_40.1 WP_11.1 HPS_10 HPS_10
推荐阅读
- python - 有没有办法检查套接字是否仍在运行?
- java - 如何使用tomcat分别配置应用服务器和web服务器?
- c# - Avro 架构 GenericRecord 缺少键
- php - 如何在 foreach 循环中使用数组值创建动态变量
- wcf - WCF 服务无法为具有权限的 SSL/TLS 安全通道建立信任关系
- sql-server - 如何对 SSRS 中的时间数据类型列求和?
- java - 当有兄弟姐妹时,Jsoup 无法很好地读取标签
- rest - 无法在 codeigniter REST API 中从一种方法访问会话到另一种方法
- wordpress - 对多个 wordpress 网站使用相同的数据库
- c# - 如何将标签和onclick事件添加到实例化标记对象(实例化标记对象是预制对象)