Pandas基于groupby AND部分字符串匹配丢弃行



我有一个大的pandas DataFrame,它有很多列。我想在有重复的地方按序列号AND进行分组,以保留产品ID以-RF结尾的行。我可以用groupby(subset='Serial Number')实现第一部分,但我不知道如何将其与基于正则表达式('-RF$')的保持/删除行相结合。我怎样才能做到这一点?

输入:

产品ID
序列号
ABC1745AABC ABC-SUP2E-RF
ABC1745AABC ABC-SUP2E
ABC1745AAFF ABC-SUP2E
ABC1745AAFE ABC-SUP2E
ABC1745AAB1 ABC-SUP2E-WS
ABC1745AAB1 ABC-SUP2E

您可以添加一列来标记以"RF";,然后对值进行排序,使这些行位于每组的顶部。最后分组,坐在第一排:

df["RF"] = df["Product ID"].str.endswith("-RF")
df = df.sort_values(["Serial Number", "RF"], ascending=False)
output = df.groupby("Serial Number").first()[["Serial Number", "Product ID"]]

输出:

Serial Number    Product ID
2  ABC1745AAFF      ABC-SUP2E
3  ABC1745AAFE      ABC-SUP2E
0  ABC1745AABC   ABC-SUP2E-RF

感谢您的帮助。我已经这样解决了:

df=df.sort_values(["序列号","产品ID"],升序=(True,True((

df=df.drop_duplicates(subset=[序列号','产品组'],keep='第一个'(

幸运的是,我保存的产品ID是所有情况下最长的字符串。如果情况并非总是如此,那么最好能找到一个解决方案。

最新更新