我有两个数据框。例如:
df1:
ID Value1 Country Value2 Desc Value3
AA 5.442 US 6.32 desc1 7.02
BB 7.442 IN 2.32 desc2 5.02
CC 3.442 JP 4.32 desc3 2.02
DD 2.442 AU 5.32 desc4 6.02
df2:
ID Value1 Country Value2 Desc Value3
AA 5.3 US 5.12 desc1 7.02
BB 7.12 UK 1.32 desc2 5.02
CC 3.542 JP 2.12 desc3 2.02
DD 2.4 AU 5.82 desc4 6.02
我需要比较这两个数据帧(假设ID是索引),我需要比较其他列,如“Value1”,“Country”等。如果列是数值,我需要找到它的差异,并需要检查它是否超出容差限制(例如,如果它达到> 10%),我需要将该记录标记为差异并写入到一个新的数据框,其中包含哪些列已更改以及更改了多少,如:
ID Column_Name df1_value df2_value difference
AA Value1 5.442 5.3 0.142
BB Country IN UK <blank>
我尝试连接两个数据框并尝试按ID分组,但不知道如何继续进行分组。
concat_df = pd.concat([df1, df2], axis=0)
grouped = concat_df.groupby('ID')
在分组数据框内,我为每个ID获取两行,我不知道如何根据其类型检查每个列值。如果type是numeric,我需要找到差异,如果type是string,我需要进行equals
比较。
答案 0 :(得分:0)
保持简单:
concat_df['diff12'] = (concat_df['v1'] - concat_df['v2']) / concat_df['v2']
concat_df['diff34'] = (concat_df['v3'] - concat_df['v4']) / concat_df['v4']
mask = (concat_df['diff12'] > 0.10) | (concat_df['diff34'] > 0.10)
concat_df = concat_df[mask]
您可以遍历要检查的所有列。如果您的示例中有重复的列名,则可能需要在执行pd.concat
时添加MultiIndex级别。