Python中两个csv文件之间的数据匹配

2024-09-26 18:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个csv文件,如下所示。

In 'order.csv'

date   orderName    orderNumber
1/7      Tom            1
1/7      Jeny           4
1/7      Brown          2
1/7      Tom            3 
1/8      Sky            5
1/8      Blue           7
1/8      Red            6
1/8      Wine           8
1/9      Tom            9
1/9      Earth          11
1/9      Earth          10


In 'run.csv'

date   runName    runNumber
1/7      Tom           
1/7      Jeny           
1/7      Tom            
1/7      Brown           
1/8      Sky            
1/8      Blue           
1/8      Red            
1/8      Wine           
1/9      Tom          
1/9      Earth          
1/9      Earth          

我的目标是orderNumber必须在runNumber中匹配date和orderName。但问题是顺序和运行顺序是不同的。如果订单名称在同一日期重复。不需要考虑周到。你知道吗

在'结果.csv'

date    runName    runNumber
1/7      Tom               
1/7      Jeny          4  
1/7      Tom            
1/7      Brown         2 
1/8      Sky           5 
1/8      Blue          7 
1/8      Red           6 
1/8      Wine          8 
1/9      Tom           9          
1/9      Earth          
1/9      Earth   

在这种情况下,如何使用python方法?
我试着做些什么,但对我来说这太难了。
所以我在这里完全问了。我很抱歉。你知道吗


Tags: csvindateblueredtomearthsky
1条回答
网友
1楼 · 发布于 2024-09-26 18:07:59

从我所经历的来看,似乎你不必拥有这两个文件,因为它们的结构完全相同。您可以做的第一件事是加载csv文件,其中包含如下所示的熊猫。你知道吗

import pandas as pd

df = pd.read_csv('order.csv')

然后,可以基于其他列添加新列。为了消除重复,使用默认的Python库Counter可能是一个不错的选择。你知道吗

from collections import Counter

name_cnt = Counter(df['orderName'])

def set_run_number(row):
    if name_cnt[row['orderName']] > 1:
        return
    else:
        return int(row['orderNumber'])


df['runNumber'] = df.apply(lambda row: set_run_number(row), axis=1)

事情是这样的。你知道吗

   date orderName  orderNumber  runNumber
0   1/7       Tom            1        NaN
1   1/7      Jeny            4        4.0
2   1/7     Brown            2        2.0
3   1/7       Tom            3        NaN
4   1/8       Sky            5        5.0
5   1/8      Blue            7        7.0
6   1/8       Red            6        6.0
7   1/8      Wine            8        8.0
8   1/9       Tom            9        NaN
9   1/9     Earth           11        NaN
10  1/9     Earth           10        NaN

相关问题 更多 >

    热门问题