【问题标题】:How can I add position of similar records to two separate csv files?如何将相似记录的位置添加到两个单独的 csv 文件?
【发布时间】:2020-12-01 22:49:55
【问题描述】:

首先,我刚开始使用 pandas,我的任务是我有两个 csv 文件,我读取它们,比较并附加它们在两个文件中占用的行。我正在使用熊猫数据框。现在我必须将它写回 csv,在这些位置附加额外的列。我正在考虑使用 dict 或列表并将它们附加到最后,但也许有更有效和优雅的解决方案。

df1_index = 0
df1['position'] = 0

for row in df1['Names']:
    ur = row.upper()
    df1_index += 1
    df2_index = 1
    for line in df2['Students']:
        ul = line.upper()
        if ur == ul:
            df1['position'].append(row + " in second file: " + str(df2_index) + " row.")
            print(row + " is also present in the second file in " + str(df2_index) + " row.")
            print(line + " is also present in the first file in " + str(df1_index) + " row.")
        df2_index += 1

编辑: 上面的方法效率很差,我得概括一下问题

所以我有两个 csv 文件: csv1.csv:

  • 2010-12-10,史蒂夫,乔布斯,
  • 20 2010-12-12,埃隆,马斯克,
  • 23 2011-01-02,拉里,佩奇,25

csv2.csv:

  • 2015-01-03,史蒂夫·乔布斯,34
  • 2015-02-13,埃隆·马斯克,27 岁
  • 2015-01-17,拉里佩奇,18
  • 2015-09-11,史蒂夫·乔布斯,25 岁​​

任务是通过名称 ofc 在这两个文件中查找相似之处,并添加一行(在新列中)及其来自另一个文件的索引/索引。 现在我提取列(从 csv1 合并 2 并作为新列追加,都作为 DataFrames),将它们大写,然后我可以在相反的文件中打印它们的位置(非常原始,嵌套循环和外部 int 索引)。 pandas 是否提供了一些工具来获得我想要的东西?您对可能的解决方案有任何想法吗?我应该更多地了解什么? ;)

ex 的期望输出。 csv1:

  • 2010-12-10,史蒂夫,乔布斯,20,[1,4]
  • 2010-12-12,埃隆,马斯克,23 岁,
  • 2011-01-02,拉里,佩奇,25,

csv2:

csv2.csv:

  • 2015-01-03,史蒂夫·乔布斯,34,1
  • 2015 年 2 月 13 日,埃隆·马斯克,27 岁,
  • 2015-01-17,拉里佩奇,18,
  • 2015-09-11,史蒂夫·乔布斯,25,1

【问题讨论】:

  • 您的具体问题是什么?
  • 如何将 ur 和 ul 的位置添加到相反的文件中,以及我对字典的想法(将多个值添加到一个索引)是否是一个好的想法,或者是否还有其他更有效的想法。
  • 为什么不使用.merge() 来标记两个数据集中的行?
  • 我不确定,我必须在两个原始文件中保留记录索引,以便在最后附加它们

标签: python pandas csv


【解决方案1】:

如果我理解正确,您可以:

# list of the values in the common column
list_common = df['common'].tolist()

# Get the index of the values matching in the other dataframes
matching_df1 = df.index[df1['Student'].isin(list_common)].tolist()
matching_df2 = df.index[df2['Student'].isin(list_common)].tolist()

输出列表将值的索引存储在其数据框中。我希望这会有所帮助,从那里您可以使用最适合您的格式

【讨论】:

  • 不完全是,'common' 列是一个 Series 对象,包含取自一个文件的名称。 'Students' 是另一个,我必须在 df1 中找到共同元素并附加列,其中 df2 中的等价物和相反。这就是为什么我需要这些索引并且在我必须以某种方式将它们附加到表之后:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2017-11-29
相关资源
最近更新 更多