我希望根据日期列按降序对Pandas 数据框的值进行排序,但也要考虑名称、产品和发布版本列的重复值,以便排序包含连续行中基于重复的名称、产品和发布版本列的行.但我没能得到想要的结果.

以下是我编写的示例代码:

data = {
    'Name': ['John', 'Alice', 'John', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
    'Product': ['A', 'B', 'A', 'C', 'B', 'C', 'B', 'C'],
    'Release Version': ['1.6', '2.0', '1.5', '3.0', '2.5', '3.2', '2.6', '2.8'],
    'Date': ['2022-05-15', '2022-04-20', '2022-05-10', '2022-05-01', '2022-04-25', '2022-05-05', '2022-04-29', '2022-04-27']
}

# Create a DataFrame
df = pd.DataFrame(data)

# Convert the 'Date' column to datetime
df['Date'] = pd.to_datetime(df['Date'])

# Sort values based on 'Date' in descending order and 'Name', 'Product', 'Release Version' columns
df = df.sort_values(['Date', 'Name', 'Product', 'Release Version'], ascending=[False, True, True, False])

这为我提供了以下结果:

    Name Product     Release Version    Date
    John    A            1.6     2022-05-15
    John    A            1.5     2022-05-10
    Bob     C            3.2     2022-05-05
    Bob     C            3.0     2022-05-01
    Alice   B            2.6     2022-04-29
    Bob     C            2.8     2022-04-27
    Alice   B            2.5     2022-04-25
    Alice   B            2.0     2022-04-20

预期的结果是这样的:

    Name Product     Release Version    Date
    John    A            1.6         2022-05-15
    John    A            1.5         2022-05-10
    Bob     C            3.2         2022-05-05
    Bob     C            3.0         2022-05-01
    Bob     C            2.8         2022-04-27
    Alice   B            2.6         2022-04-29
    Alice   B            2.5         2022-04-25
    Alice   B            2.0         2022-04-20

如果有人能帮我解决这个问题就太好了.

推荐答案

如果我理解正确的话,您首先需要按每个组的最大日期排序(使用groupby.transform('max')获得),最后按日期排序:

out = (df
   .assign(max_date=df.groupby(['Name', 'Product'])['Date'].transform('max'))
   .sort_values(['max_date', 'Name', 'Product', 'Release Version', 'Date'],
                ascending=[False, True, True, False, False])
   .drop(columns='max_date')
)

输出:

    Name Product Release Version       Date
0   John       A             1.6 2022-05-15
2   John       A             1.5 2022-05-10
5    Bob       C             3.2 2022-05-05
3    Bob       C             3.0 2022-05-01
7    Bob       C             2.8 2022-04-27
6  Alice       B             2.6 2022-04-29
4  Alice       B             2.5 2022-04-25
1  Alice       B             2.0 2022-04-20

中级:

    Name Product Release Version       Date   max_date
0   John       A             1.6 2022-05-15 2022-05-15
2   John       A             1.5 2022-05-10 2022-05-15
5    Bob       C             3.2 2022-05-05 2022-05-05
3    Bob       C             3.0 2022-05-01 2022-05-05
7    Bob       C             2.8 2022-04-27 2022-05-05
6  Alice       B             2.6 2022-04-29 2022-04-29
4  Alice       B             2.5 2022-04-25 2022-04-29
1  Alice       B             2.0 2022-04-20 2022-04-29

Python相关问答推荐

在Python中添加期货之间的延迟

情节生成的饼图文本超出页面边界

如何使用函数正确索引收件箱?

当测试字符串100%包含查询字符串时,为什么t fuzzywuzzy s Process.extractBests不给出100%分数?

socket.gaierror:[Errno -2]名称或服务未知|Firebase x Raspberry Pi

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

具有2D功能的Python十六进制图

如何使用scipy从频谱图中回归多个高斯峰?

如何在BeautifulSoup中链接Find()方法并处理无?

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

标题:如何在Python中使用嵌套饼图可视化分层数据?

管道冻结和管道卸载

用Python解密Java加密文件

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

joblib:无法从父目录的另一个子文件夹加载转储模型

不能使用Gekko方程'

基于形状而非距离的两个numpy数组相似性

剪切间隔以添加特定日期

交替字符串位置的正则表达式