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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵