xiaoleishawnli 2021-04-10 07:00 采纳率: 100%
浏览 397
已采纳

python: 两个csv的dataframe中数值比较

我有两个不同大小的dataframe,  csv文件,形式都是是['name','category','value1','value2','value3'] 

首先需要改成['name','category','value1';'name','category','value2','name','category','value3']的格式,

 

然后需要将其中一个的每一value和第二个dataframe中的所有的value进行比较,找出最接近的值,然后计算差值,print出这个值所在的索引。

最后得到结果文件。

对循环,数值目前理解困难。 

nearest=(np.abs(array - value)).argmin()

需要对value(第一个dataframe中数值)进行循环,

有大神可以帮忙么

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-Yang 2021-04-10 08:05
    关注

    试下下面的代码, 两个表都是二维的表, 思路:

    • 两个循环, 第1层循环第1个表的每个值, 第2个循环是在第2个表中按列循环
    • 判断是否为最小值,获取索引
    import pandas as pd
    import numpy as np
    np.random.seed(123)
    data1 = pd.DataFrame({'A':np.random.randint(50,100,5),'B':np.random.randint(5,20,5)})
    data2 = pd.DataFrame(np.random.randint(50,100,(5,2)),columns=['a','b'])
    
    lis = data1.melt()['value'].tolist()
    for i in lis:
        datai = abs(i - data2)
        i_min = datai.min().min()
        for col in datai.columns:
            if i_min in datai[col].values:
                i_index = datai[col][datai[col].values==i_min].index.tolist()
                print(i,'→',i_index)
    95 → [3]
    52 → [2]
    78 → [1, 3, 4]
    84 → [0]
    88 → [0]
    6 → [2]
    8 → [2]
    15 → [2]
    16 → [2]
    14 → [2]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用