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

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

报告相同问题?

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。