我有两个如下的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必须放在与日期和orderName相匹配的runNumber内。但问题是命令和运行csv的顺序不同。并且如果orderName在同一日期重复。不必考虑。

在“ result.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方法?
我试图做点什么,但对我来说这是一个很难的问题。
所以我完全在这里问。对不起。

分析解答

从我的经历来看,您似乎不必拥有两个文件,因为它们具有完全相同的结构。您可以做的第一件事是使用下面的Pandas加载csv文件。

import pandas as pd

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

然后,您可以在其他列的基础上添加新列。为了摆脱重复,使用Counter(默认的Python库)可能是一个不错的选择。

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