我有两列 Dataframe ,如下所示:
| 标号|信息版本|
| - ------|- ------|
| | 十八、二、六|
| | 十八、二、六|
| | 十八、二、七|
| | 十八、二、八|
| | 十八、二、八|
| | 二十、一、一|
| | 二十、二、一|
我想把每个版本增量都标记为升级版本,比如每个id的第一个条目保持为none,然后开始标记,如果没有变化,那么条目为none,所以输出应该是这样的:
| 标号|信息版本|
| - ------|- ------|
| 无|十八、二、六|
| 无|十八、二、六|
| 补片|十八、二、七|
| 补片|十八、二、八|
| 无|十八、二、八|
| 大调|二十、一、一|
| 小调|二十、二、一|
import pandas as pd
from packaging import version
def version_upgrade(prev_version, current_version):
if prev_version is None:
return None
elif version.parse(current_version) > version.parse(prev_version):
if version.parse(current_version).major > version.parse(prev_version).major:
return "major"
elif version.parse(current_version).minor > version.parse(prev_version).minor:
return "minor"
else:
return "patch"
else:
return None
semver_df["label"] = None
prev_version_list = semver_df["info_version"].shift(1).tolist()
semver_df["label"] = semver_df["info_version"].apply(lambda x: version_upgrade(prev_version_list.pop(0), x))
这段代码在我提供样本数据时可以工作,但是在我的情况下,我也需要对我的提交日期进行排序,我不确定这将如何实现。任何帮助都将不胜感激!
1条答案
按热度按时间iezvtpos1#
这里有一种方法。拆分和扩展版本号,然后将dtype更改为
int
,并按主版本、次版本和补丁版本对值进行排序。计算diff
以比较前一行和当前行,然后使用np.select
根据版本组件的差异从主版本、次版本和补丁版本中进行选择结果