在熊猫系列/列中找到最新的版本号

时间:2019-06-07 03:58:17

标签: python python-3.x pandas dataframe

我对python很陌生。我想映射到最新版本。如果Software_Version列中有两个版本,则始终需要选择第二个版本,即最新版本。

Sofware_Component     Software_Version 

Python                     2.7
Python                     2.7,3.6
R                          3.5.0,3.6.0
R                          3.5.0

替换最新版本的代码:

result4.loc[result4['COMPONENT_VERSION'].str.contains(',')] = result4['COMPONENT_VERSION'].str.split(',').str[-1]

ERROR:ValueError: cannot index with vector containing NA / NaN values

代码正常运行

result4['Software_Componenet'] = result4['SOFTWARE_COMPONENT'].map(str)+' '+result4['COMPONENT_VERSION'].map(str)

我期望结果如下

Software_Component
Python 2.7
Python 3.6
R 3.6.0
R 3.5.0

1 个答案:

答案 0 :(得分:1)

this thread上扩展,您可以在列表理解范围内从distutils.version.LooseVersion反复调用max

from distutils.version import LooseVersion

[max(vers.split(','), key=LooseVersion) for vers in df['Software_Version']]
# ['2.7', '3.6', '3.6.0', '3.5.0']

df['Software_Version'] = [
    max(vers.split(','), key=LooseVersion) for vers in df['Software_Version']
]
df

  Sofware_Component Software_Version
0            Python              2.7
1            Python              3.6
2                 R            3.6.0
3                 R            3.5.0

如果您想使用更泛泛的版本(尽管会慢一些),则可以splitapply

df['Software_Version'].str.split(',').apply(max, key=LooseVersion)

0      2.7
1      3.6
2    3.6.0
3    3.5.0
Name: Software_Version, dtype: object

要将它们连接到一个列中,请使用agg

df.agg(' '.join, axis=1)

0    Python 2.7
1    Python 3.6
2       R 3.6.0
3       R 3.5.0
dtype: object