【问题标题】:How to sum rows of two or more csv files that have the same value in column 1?如何对第 1 列中具有相同值的两个或多个 csv 文件的行求和?
【发布时间】:2021-02-25 17:19:09
【问题描述】:

我有两个如下所示的 csv 文件:

csv1.csv:

   COL1      COL2
   Daniel    120
   Max       340 
   Sabrina   5 

csv2.csv:

   COL1      COL2
   Max       120
   Sabrina   40
   Daniel    50
   Sarah     580

我基本上想合并它们,所以它看起来像这样:

   COL1      COL2
   Sarah     580
   Max       460
   Daniel    170
   Sabrina   45

在python中可以实现吗?

我只发现了关于 1 个 csv 文件的类似问题,非常感谢您的帮助。

【问题讨论】:

  • 这可以使用Pandas 轻松完成。你想要这样,还是想要在纯 Python 中完成?

标签: python


【解决方案1】:

你可以试试mergedf1 是来自csv1 的DataFrame,df2 是来自csv2 的DataFrame

import pandas as pd # pip install pandas

# setting up the dataframe from you example
d1 = [['Daniel'  ,  120],
['Max'     ,  340], 
['Sabrina' ,  5]]

df1 = pd.DataFrame(d1, columns=['col1', 'col2'])

d2 = [['Max'     ,  120],
['Sabrina' ,  40],
['Daniel'  ,  50],
['Sarah'   ,  580]]

df2 = pd.DataFrame(d2, columns=['col1', 'col2'])


# here comes the part to calculate 
df_out = df1.merge(df2, on='col1', how='outer').fillna(0)
df_out['col2'] = df_out['col2_x'] + df_out['col2_y']

# remove the unnecesary columns
df_out.drop(columns=['col2_x', 'col2_y'], inplace=True)

print(df_out)
      col1  col2
0   Daniel   170
1      Max   460
2  Sabrina    45
3    Sarah   580

【讨论】:

  • 如果您使用pandas 提供解决方案,您不妨也让 OP 了解一下。此外,包括安装和创建df 的步骤。
【解决方案2】:

在字典中添加值,如下所示:

with open('csv1.csv') as f,open('csv2.csv') as f2:
    r = csv.reader(f, delimiter=' ')
    dict3 = {x[0]: x[1] for x in r}
    r2 = csv.reader(f2, delimiter=' ')
    for row in r2:
        if 'COL' not in row[1]:
            dict3[row[0]] = int(dict3[row[0]]) + int(row[1])
print(dict3) 

现在您只需将 dict3 写入输出文件。

with open('output.csv', 'w') as f3:
    please = csv.writer(f3)
    for k, v in dict3.items():
       please.writerow([k + ' ' +str(v)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 2020-02-02
    • 2022-06-11
    • 2018-04-29
    • 2017-04-14
    • 1970-01-01
    • 2013-08-05
    • 2015-09-28
    相关资源
    最近更新 更多