python - 查找两个列表的每个元素之间的最大差异
问题描述
我有两个字典列表,想找出两个列表中每个元素的最大差异。两个列表的长度相同。
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
解决方案
我们要比较两个 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
推荐阅读
- java - Swagger Schema - 模式不适用于字符串数组
- r - 基于 glmnet 包最能区分组的变量
- sql - 如何在 TypeORM 中按字符串长度排序?
- javascript - 未捕获的 ReferenceError:未定义 jQuery(Thymeleaf)
- sql - 连接具有不同数据类型的 2 个表
- php - 在不破坏 CakePHP 中的 buildRules() 表回调的情况下限制 beforeFind() 表回调的查询结果
- botframework - 在基于 ms 团队搜索的消息扩展中将“设置”更改为“注销”
- typescript - 缩小深度嵌套对象的类型
- api - 如何从场景大纲中获取一列的值作为空手道中的数组
- java - 我将如何为任何两个对象之间相似性的度量编写接口?