【问题标题】:Finding the difference between values with the same name in a merged CSV file在合并的 CSV 文件中查找同名值之间的差异
【发布时间】:2022-06-23 01:07:17
【问题描述】:

我需要找出具有相同名称的值之间的差异。 我有两个 csv 文件,我将它们合并在一起并放在另一个 csv 文件中,以便并排比较数量差异。

以下是合并后的 csv 文件示例:

Q1Count             Q1Names               Q2Count                   Q2Names
2                     candy                     2                     candy
9                     apple                     8                     apple
10                    bread                     5                 pineapple
4                      pies                    12                     bread
3                   cookies                     4                      pies
32                chocolate                     3                   cookies
[Total count: 60]                               27                 chocolate
NaN                     NaN                     [Total count: 61]       

所有名称都相同(几乎),但我想为Q2Namespinapple 下弹出的新名称创建一个新的行空间。

下面是我目前实现的代码:

import pandas as pd
import csv
    
Q1ReportsDir='/path/to/Q1/Reports/'
Q2ReportsDir='/path/to/Q2/Reports/'

Q1lineCount = f'{Q1ReportsDir}Q1Report.csv'
Q2lineCount = f'{Q2ReportsDir}Q2Report.csv'

merged_destination = f'{Q2ReportsDir}DifferenceReport.csv'

diffDF = [pd.read_csv(p) for p in (Q1lineCount, Q2lineCount)]
merged_dataframe = pd.concat(diffDF, axis=1)
merged_dataframe.to_csv(merged_destination, index=False)


diffGenDF = pd.read_csv(merged_destination)

# getting Difference
diffGenDF ['Difference'] = diffGenDF ['Q1Count'] - diffGenDF ['Q2Count']
diffGenDF = diffGenDF [['Difference', 'Q1Count', 'Q1Names', 'Q2Count ', 'Q2Names']]

diffGenDF.to_csv(merged_destination, index=False)

因此,在Q1Names 下留出一个空格,并在pineapple 位于Q2Names 列下的同一行中,在Q1Count 下添加一个0,这样更容易看到值之间的准确差异。

Q1Count              Q1Names               Q2Count                   Q2Names
2                      candy                     2                     candy
9                      apple                     8                     apple
0                                                5                 pineapple
10                     bread                    12                     bread
4                       pies                     4                      pies
3                    cookies                     3                   cookies
32                 chocolate                    27                 chocolate
[Total count: 60]                               [Total count: 61]

如果我能通过那部分,我会得到的最终期望输出是这样的:

Difference          Q1Count                  Q1Names          Q2Count                  Q2Names
0                         2                    candy                2                    candy
1                         9                    apple                8                    apple
-5                        0                                         5                pineapple
-2                       10                    bread               12                    bread
0                         4                     pies                4                     pies
0                         3                  cookies                3                  cookies
5                        32                chocolate               27                chocolate
                         [Total count: 60]                         [Total count: 61]

【问题讨论】:

    标签: python-3.x pandas dataframe csv


    【解决方案1】:

    我能够使用 pd.merge 和您提供的数据框获得相同的结果

    df_merge = pd.merge(df1, df2, left_on = 'Q1Names', right_on = 'Q2Names', how = 'outer')
    df_merge[['Q1Count', 'Q2Count']] = df_merge[['Q1Count', 'Q2Count']].fillna(0)
    df_merge[['Q1Names', 'Q2Names']] = df_merge[['Q1Names', 'Q2Names']].fillna('')
    df_merge['Difference'] = df_merge['Q1Count'].sub(df_merge['Q2Count'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多