【问题标题】:How to compare different dataframes by column?如何按列比较不同的数据框?
【发布时间】:2022-11-16 23:54:23
【问题描述】:

我有两个 csv 文件,每个文件有 200 列。这两个文件的行数和列数完全相同。我想分别比较每一列。

这个想法是将文件“a”的第 1 列值与文件“b”的第 1 列值进行比较,并检查列中所有数字的差异等等(有 100 行)并写出一个数字有多少案例差异大于 3。

我想对所有列重复相同的操作。我知道它应该是一个双 for 循环,但我不知道具体是怎么做的。可能有 2 个 for 循环,但不知道该怎么做......

提前致谢!

import pandas as pd
dk = pd.read_csv('C:/Users/D/1_top_a.csv', sep=',', header=None)
dk = dk.dropna(how='all')
dk = dk.dropna(how='all', axis=1)
print(dk)

dl = pd.read_csv('C:/Users/D/1_top_b.csv', sep=',', header=None)
dl = dl.dropna(how='all')
dl = dl.dropna(how='all', axis=1)
print(dl)

rows=dk.shape[0]
print(rows)
for i
print(dk._get_value(0,0))

【问题讨论】:

  • 请阅读问题,它们都没有帮助
  • 您能否提供一些示例输入和预期输出?您说解决方案“应该是双 for 循环”——pandas for 循环很少是最佳选择。 df.compare 几乎可以肯定是解决方案中的关键构建块。
  • 当您说“写出在多少情况下差异大于 3 的数字”时——如果您将 [1, 2, 3, 6, 7, 8][0, 0, 0, 0, 5, 5] 进行比较,您期望输出什么? 1(因为只有6-0与另一个列表中的比较相同元素的距离超过 3 个?或 5(如果超过 3 个不同的值不同,则所有不同值的计数) ? 或者是其他东西?
  • 确切地说,我想要一个数字作为每个比较列的输出。

标签: python pandas dataframe for-loop


【解决方案1】:
df1 = pd.DataFrame(dict(cola=[1,2,3,4], colb=[4,5,6,7]))
df2 = pd.DataFrame(dict(cola=[1,2,4,5], colb=[9,7,8,9]))

for col in df1.columns:
    diff = df1[col].compare(df2[col])
    if diff.shape[0] >= 3:
        print(f'Found {diff.shape[0]} diffs in {col}')
        print(diff)

【讨论】:

  • 无法决定是投票(提供可重现的示例,OP 没有;提供 OP 想象的解决方案)还是投票(使用 for 循环遍历列;熊猫通常有更好的方法)。好功夫
猜你喜欢
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2021-10-08
  • 2021-05-01
相关资源
最近更新 更多