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

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条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格