首页 > 解决方案 > 查找两个列表的每个元素之间的最大差异

问题描述

我有两个字典列表,想找出两个列表中每个元素的最大差异。两个列表的长度相同。

list1 = [{'NY':40, 'NJ':30, 'FL':30}, {'NY':40, 'NJ':50, 'FL':10}]

list2 = [{'NY':50, 'NJ':45, 'CT':20}, {'NY':40, 'FL':30}]

对于list1[0]list2[0]FL由于FL= 30、NY= 10、NJ= 15 和CT= 20,两者之间的差异最大。对于list1[1]list2[1]NJ差异最大。

如何在下面获得所需的输出?谢谢。

 State  Diff 
 FL     30
 NJ     50     

标签: pythonpandasdictionary

解决方案


我们要比较两个 DataFrame 的对应行。首先,让align他们:

df1 = pd.DataFrame(list1)    
df2 = pd.DataFrame(list2)   

df1, df2 = df1.fillna(0).align(df2.fillna(0), fill_value=0)
df1

   CT  FL  NJ  NY
0   0  30  30  40
1   0  10  50  40

df2
     CT    FL    NJ  NY
0  20.0   0.0  45.0  50
1   0.0  30.0   0.0  40

现在,您可以使用idmax查找差异最大的值,调用lookup以获取差异值并创建一个新的 DataFrame。

u = (df1 - df2).abs()
idx = u.idxmax(1)
pd.DataFrame({'State': idx, 'Diff': u.lookup(u.index, u.idxmax(1))})

  State  Diff
0    FL  30.0
1    NJ  50.0

推荐阅读