[英]How to compare two data frames with same columns but different number of rows?
[英]Compare two data frames side by side for same columns but different rows
我有两个具有相同列标签的数据框,如下所示:
df1 = {'key_1': {0: 'F', 1: 'H', 2: 'E'},
'key_2': {0: 'F', 1: 'G', 2: 'E'},
'min': {0: -158, 1: -881, 2: -674},
'count': {0: 58, 1: 24, 2: 13}}
df2 = {'key_1': {0: 'C', 1: 'L', 2: 'F', 3: 'K'},
'key_2': {0: 'C', 1: 'D', 2: 'F', 3: 'K'},
'min': {0: -452, 1: -153, 2: -181, 3: -120},
'count': {0: 7470, 1: 1262, 2: 171, 3: 86}}
pandas.DataFrame.compare 对于每列的并排比较很有用,但它不适用于比较具有不同行的数据帧
df1.compare(df2, keep_shape=True, keep_equal=True)
ValueError:只能比较标记相同的 DataFrame 对象
我们可以使用 pandas.merge 实现相同的功能吗?
我在下面尝试过,但没有对每个相应的列进行并排比较
pd.merge(df1,df2, on=['key_1','key_2'], suffixes=['_df1','_df2'], how='outer')
key_1 key_2 min_df1 count_df1 min_df2 count_df2
0 F F -158.0 58.0 -181.0 171.0
1 H G -881.0 24.0 NaN NaN
2 E E -674.0 13.0 NaN NaN
3 C C NaN NaN -452.0 7470.0
4 L D NaN NaN -153.0 1262.0
5 K K NaN NaN -120.0 86.0
使用concat
和 convert ['key_1','key_2']
to MultiIndex
:
df = (pd.concat([df1.set_index(['key_1','key_2']),
df2.set_index(['key_1','key_2'])], keys=['df1','df2'], axis=1)
.sort_index(level=1, axis=1))
print (df)
df1 df2 df1 df2
count count min min
key_1 key_2
C C NaN 7470.0 NaN -452.0
E E 13.0 NaN -674.0 NaN
F F 58.0 171.0 -158.0 -181.0
H G 24.0 NaN -881.0 NaN
K K NaN 86.0 NaN -120.0
L D NaN 1262.0 NaN -153.0
合并后,您可以按字母顺序对列重新排序,以便将它们并排排列:
first_columns = ['key_1','key_2']
merged_df = pd.merge(df1,df2, on=['key_1','key_2'], suffixes=['_df1','_df2'], how='outer')
merged_df = merged_df[first_columns + sorted([col for col in merged_df.columns if col not in first_columns ])]
单程:
merged_df = pd.merge(df1, df2, on=['key_1', 'key_2'], suffixes=[
'_df1', '_df2'], how='outer').set_index(['key_1', 'key_2'])
merged_df.columns = merged_df.columns.str.split('_', expand=True)
merged_df = merged_df.sort_index(level=0, axis=1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.