[英]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.