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 php环境如何实现国密SM2相关功能
  • ¥15 关于#单片机#的问题:K210 例程里面提示我iomem.h: No such file or directory
  • ¥15 LSPI算法的大问题
  • ¥15 java导出word 动态填充数据
  • ¥20 扑克的算牌公式及软件制作
  • ¥20 如何通过云图中RPG去计算云图上不同位置的值?
  • ¥15 请问不小心下载到了钓鱼软件怎么办?
  • ¥15 求国博抢票 求国博抢票 有的私
  • ¥50 swiftui @query 报错
  • ¥50 怎么解决刷卡或扫码后,点击软件输入框,win10屏幕键盘不会自动弹出的问题