繁体   English   中英

将值列表与 dataframe 列进行比较,如果找到列表中的值,则使用 pandas 比较下一列中的数据

[英]Compare list of value with dataframe columns and if value in list found compare the data in next column using pandas

在 python pandas function 上需要您的帮助。 我是 pandas 的新手,并试图探索它。 我有一个场景,我有如下产品列表:

product_list=['IBM','Redhat','microsoft']

以及我想根据某些条件与版本列进行比较的版本字典:

version_dict={'IBM': '8.0.0','microsoft':'9.5','Redhat':'3.1.1'}

我有一个 dataframe 如下:

 hostname product version Owner Environment server1 IBM 3.1.1 Tom UAT server2 Redhat 2.1.2 Dick PROD server3 microsoft 10 Harry PROD server4 microsoft 9 Harry UAT server5 IBM 8.5.5 Tom PROD

我想以这样一种方式循环,如果对于所有者“Tom”,在“product”列中找到 product_list 中定义的任何产品,然后将 version_dict 中的产品版本与“version”中的列值进行比较。 如果版本小于字典“version_dict”中定义的值,则要将整行复制到单独的 excel 文件中。

虽然不是严格意义上的循环,但这可能会回答您的问题:

df = ... your original DF ...
product_list=['IBM','Redhat','microsoft']
version_dict={'IBM': '8.0.0','microsoft':'9.5','Redhat':'3.1.1'}

Select 所有者和目标产品:

dfc = df[(df['Owner']=='Tom') & (df['product'].isin(product_list))].copy()

查找并设置最低版本:

dfc['min_ver'] = dfc['product'].map(version_dict)

找出不满足最低要求的版本:

dfx = dfc[dfc.apply(lambda x: x['version']<x['min_ver'], axis=1)]

dfx

  hostname product version Owner Environment min_ver
0  server1     IBM   3.1.1   Tom         UAT   8.0.0

然后另存为 XLS:

dfx.to_excel(...)

Note the the lambda function above in the apply() - lambda x: x['version']<x['min_ver'] - is inadequate for comparing string v.r.m 's. 我包括它只是为了说明。 您需要用可以正确进行此比较的真正 function 替换。 这是一个例子: https://www.geeksforgeeks.org/compare-two-version-numbers/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM