У меня есть два CSV-файла, которые я сравниваю и возвращаю только столбцы рядом, которые имеют разные значения.
df1
Country 1980 1981 1982 1983 1984
Bermuda 0.00793 0.00687 0.00727 0.00971 0.00752
Canada 9.6947 9.58952 9.20637 9.18989 9.78546
Greenland 0.00791 0.00746 0.00722 0.00505 0.00799
Mexico 3.72819 4.11969 4.33477 4.06414 4.18464
df2
Country 1980 1981 1982 1983 1984
Bermuda 0.77777 0.00687 0.00727 0.00971 0.00752
Canada 9.6947 9.58952 9.20637 9.18989 9.78546
Greenland 0.00791 0.00746 0.00722 0.00505 0.00799
Mexico 3.72819 4.11969 4.33477 4.06414 4.18464
import pandas as pd
import numpy as np
df1=pd.read_csv('csv1.csv')
df2=pd.read_csv('csv2.csv')
def diff_pd(df1, df2):
"""Identify differences between two pandas DataFrames"""
assert (df1.columns == df2.columns).all(), \
"DataFrame column names are different"
if any(df1.dtypes != df2.dtypes):
"Data Types are different, trying to convert"
df2 = df2.astype(df1.dtypes)
if df1.equals(df2):
print("Dataframes are the same")
return None
else:
# need to account for np.nan != np.nan returning True
diff_mask = (df1 != df2) & ~(df1.isnull() & df2.isnull())
ne_stacked = diff_mask.stack()
changed = ne_stacked[ne_stacked]
changed.index.names = ['Country', 'Column']
difference_locations = np.where(diff_mask)
changed_from = df1.values[difference_locations][0]
changed_to = df2.values[difference_locations]
y=pd.DataFrame({'From': changed_from, 'To': changed_to},
index=changed.index)
print(y)
return pd.DataFrame({'From': changed_from, 'To': changed_to},
index=changed.index)
diff_pd(df1,df2)
Мой текущий вывод:
From To
Country Column
0 1980 0.00793 0.77777
Так что вместо индекса 0 я хочу получить название страны для строки, которая имеет несоответствующие значения. Ниже приведен пример.
Я хочу, чтобы мой вывод был:
From To
Country Column
Bermuda 1980 0.00793 0.77777
Спасибо всем, кто может предоставить решение.