python计算两个DataFrame的指定两列中,相同的数据有多少

目的:查询数据1和数据2中,red与red列相同 并且blue与blue列相同的,情况有多少。
(备注:两个数据中格式不一致,需要经过json提取等处理步骤
思路步骤
1、读取数据1,筛选需要的行,从expert_reco_num_stage_5 (json)提取red和blue数据,做为结果A
2、读取数据2,也提取red和blue数据,格式和上面一样(便于比较),作为结果B
3、A、B用指定列进行左连接,最终查询A和B中的red和blue是一样的数量有多少


步骤

  • 1、获得结果A
    • 1-1 读取数据并筛选,查看expert_reco_num_stage_5 格式
    • 1-2 提取red和blue作为新列,备用,得到结果A
  • 2、获得结果B
    • 2-1 读取数据,查询相应列格式
    • 2-2 提取red和blue作为新列,备用,得到结果B
  • 3、统计结果
    • 3-1 左连接
    • 3-2 统计结果

1、获得结果A

1-1 读取数据并筛选,查看expert_reco_num_stage_5 格式

import pandas as pd
import json# 读取智能大师号码信息
path1 = r'./expert_recommend (1).csv'
df_data = pd.read_csv(path1)# 筛选数据 :  lottery_id是1001 并且recommend=1 的
data_ssq = df_data[(df_data['lottery_id']==1001) & (df_data['recommend']==1)].reset_index() # 重置索引# 查看数据
print(data_ssq[['expert_id','issue_no','expert_reco_num_stage_5']].head())
data_ssq['expert_reco_num_stage_5'][0]

数据格式

1-2 提取red和blue作为新列,备用,得到结果A


# 每次针对一种key进行提取,并 按升序排序后,重新形成字符串
# 参数:
# thecolume 对应的json列,
# color指要处理的key,即red或blue,不传默认取red
def getnum_ssq(thecolume, color):   #  字符串处理one_data=eval(thecolume) # 获取要处理的keykey1 = ''if one_data.get(color):  # 如果color有值,则取colorkey1=colorelse:key1='red'# print('key1:',key1)# pd.json_normalize() 提取json中的指定key# 提取并按照升序排序(axis=0按照数据大小排序;=1按照索引中数据大小排序)expert_num_1 = pd.json_normalize(one_data.get(key1)).sort_values(by='$numberInt', axis=0, ascending=True) expert_num_list1 = expert_num_1.values.tolist() # 转为list# 列表保存值list_t = []for i in range(expert_num_1.shape[0]):list_t.append(expert_num_list1[i][0]) # 因为结果只有1列# print(list_t)# 列表内容用逗号连接,转成字符串expert_num1_res = ','.join(list_t)return expert_num1_res# 处理结果作为新的一列,结果A
# 注意此数据中如果真实数据是4,4,5,表中只会存 4,5,即red中不会出现相同的数字,blue一样
data_ssq['num5_red'] = data_ssq['expert_reco_num_stage_5'].apply(lambda x: getnum_ssq(x, 'red'))  # reco_issue_no为文章预测的期次号
data_ssq['num5_blue'] = data_ssq['expert_reco_num_stage_5'].apply(lambda x: getnum_ssq(x, 'blue'))  # reco_issue_no为文章预测的期次号
# data_ssq.head()  # 结果A
# 查看第一条expert_reco_num_stage_5的处理结果
print(data_ssq[['expert_id','issue_no','expert_reco_num_stage_5','num5_red','num5_blue']].iloc[0])

结果A

2、获得结果B

2-1 读取数据,查询相应列格式

path3 = r'./号码.csv'
kj_data_ssq = pd.read_csv(path3)
kj_data_ssq[['s_issue_no','s_result_area_1','s_result_area_2']].head()# red对应在area_1,blue在area_2
# 查看数据
print(kj_data_ssq['s_result_area_1'][0])
print(kj_data_ssq['s_result_area_2'][0])

数据格式2

2-2 提取red和blue作为新列,备用,得到结果B

# 功能:把字符串转为数组后,重新排序,形成新的字符串
# 参数:
# str1 字符串,是字符串类型的数值 03,19,02
# sep1 原来的分割符
# sep2 新字符串的分隔符def str_sort_2(str1, sep1, sep2): # 去除无用的0,利用int类型a = str1.split(sep1)b = [int(x) for x in a]list1 = [str(x) for x in b]# 注意:结果A中,如果是4,4,5,表中只会存 4,5。为了和 结果B便于比较,结果B也要做类似处理list2 = list(set(list1)) # 利用集合去重list2.sort() # 升序排序,可以改变源数据,降序时设置 reverse=Truestr2 = sep2.join(list2)return str2print('函数测试:',str_sort_2('03,2,6,3,8', ',', ','))# 号码排序,统一为str类型
# red、blue提取(s_result_area_2只有一个,只要也转换成字符串即可)
kj_data_ssq['win_number_red_res'] = kj_data_ssq['s_result_area_1'].apply(lambda x : str_sort_2(x, ',', ','))
kj_data_ssq['win_number_blue_res'] = kj_data_ssq['s_result_area_2'].astype(str)#   s_issue_no重命名为issue_no,便于和 后续连接时使用.永久修改
kj_data_ssq.rename(columns={'s_issue_no': 'issue_no'}, inplace=True) # rename可以在修改部分列时使用# 查看结果B
kj_data_ssq[['s_result_area_1','s_result_area_2','win_number_red_res','win_number_blue_res','issue_no']].head()

结果

3、统计结果

3-1 左连接

merge_ssq = pd.merge(data_ssq, kj_data_ssq, how='left', on='issue_no')# 筛选出 两者相同/不同 的  df[df['某一列'] != df['某一列']]
# merge_ssq[merge_ssq['num5_new'] == merge_ssq['win_number_res']]
# merge_ssq

3-2 统计结果

# 查找哪个expert_id的"红球一样,蓝球也一样"这种数据最多 
find_ssq = merge_ssq.loc[ (merge_ssq['num5_red'] == merge_ssq['win_number_red_res']) & (merge_ssq['num5_blue'] == merge_ssq['win_number_blue_res']),['expert_id', 'issue_no', 'lottery_id', 'num5_red', 'num5_blue', 'win_number_red_res', 'win_number_blue_res']]res3 = find_ssq.groupby(by='expert_id').count()
res3.sort_values(by='lottery_id', ascending=False)

统计结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB的分片集群(一) : 基础知识

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 目录导读 1. 什么是MongoDB分片 2. MongoDB分片集群介绍 2.1 MongoDB分片集群架构 2.2 MongoDB分片集群优势 3. 分片键…

C++核心deque容器,stack容器,queue容器,list容器,set容器,pair ,map容器

3.deque容器 1.deque容器的基本概念 Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。 deque容器和vector容器最…

Go语言编写安全的HTTP代理服务器

在构建HTTP代理服务器时,安全性是一个不可忽视的重要因素。使用Go语言编写代理服务器可以确保较高的性能和并发性,同时通过一些关键的安全措施,可以增强服务器的安全性。 加密通信: 使用HTTPS:HTTPS通过TLS/SSL协议对…

PostgreSQL 也很强大,为何在中国大陆,MySQL 成为主流,PostgreSQL 屈居二线呢?

问题: PostgreSQL 也很强大,为何在中国大陆,MySQL 成为主流,PostgreSQL 屈居二线呢?PostgreSQL 能否替代 MySQL? 当我们讨论为何 MySQL 在中国大陆成为主流而 PostgreSQL 屈居二线时, 我们其实…

环形链表(快慢指针)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环…

TQ15EG开发板教程:使用vivado2023.1实现LWIP的网络传输

使用vivado2023.1实现LWIP的网络传输 创建工程模板在hello_world中已经介绍过了,这里直接从配置完zynq ip核开始 配置好IP核后,右键设计模块,点击Generate Output ... 右键设计模块生成HDL文件,本工程不会使用到bit文件所以不用生…

睿尔曼6自由度机械臂ROS驱动包功能拓展之查询指令

1:主要环境预览 1:系统:Ubuntu 20.04 2:ROS:noetic 3:对于系统要求需根据相关手册完成机械臂相关依赖安装,能够运行机械臂本身基本功能, 包括 moveit。 4:准备资料…

Golang的数字签名之旅:crypto/ecdsa库详解

Golang的数字签名之旅:crypto/ecdsa库详解 引言crypto/ecdsa库概览基本功能安装和设置使用场景 ECDSA原理简介椭圆曲线密码学基础ECDSA的工作原理安全性考虑 Golang中ECDSA的实现密钥生成数字签名签名验证 crypto/ecdsa的高级应用性能优化安全性考虑实际应用案例 总…

echarts条形图添加滚动条

效果展示: 测试数据: taskList:[{majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {maj…

备战蓝桥杯---搜索(应用基础1)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们直接用深搜&#xff0c;我们可以先把空位用结构体存&#xff0c;然后打表存小方块&#xff0c;再用数组存行列。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[12][12];…

2024美赛A题七鳃鳗种群复杂系统动力学模型完整成品论文和代码

经过不懈的努力&#xff0c;2024美赛A题完整成品论文和代码已完成&#xff0c;代码为A题全部4问的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1七鳃鳗种群竞争模型的建立和求解、问题2种群优势劣势评估模型的建立…

Spring 事务原理总结三

今天这篇文章&#xff0c;我想梳理一下Spring事务用到的几个核心组件。这些核心组件是我们理解Spring事务原理的基础。通过它们我们可以体会学习一下Spring设计者设计Spring事务时的基本思路。这些组件是&#xff1a;TransactionInfo、TransactionStatus、TransactionManager、…