【问题标题】:grouping and printing the maximum in a dataframe in python在python的数据框中分组和打印最大值
【发布时间】:2021-12-27 13:51:27
【问题描述】:

一个数据框有 3 列

    A                   B          C      
^0hand(%s)leg$        27;30       42;54
^-(%s)hand0leg        39;30       47;57
^0hand(%s)leg$        24;33       39;54

因此,如果 A 列的模式相似,则 A 列具有这样的正则表达式模式,例如现在第 1 行和第 3 行相似,因此它必须合并两行并仅输出最大值,如下所示:

输出:

 A                   B          C      
^0hand(%s)leg$        27;33       42;54
^-(%s)hand0leg        39;30       47;57

任何线索都会有所帮助

【问题讨论】:

    标签: python regex pandas dataframe series


    【解决方案1】:

    你可以使用:

    (df.set_index('A').stack()
       .str.extract('(\d+);(\d+)').astype(int)
       .groupby(level=[0,1]).agg(max).astype(str)
       .assign(s=lambda d: d[0]+';'+d[1])['s']    # OR # .apply(';'.join, axis=1)
       .unstack(1)
       .loc[df['A'].unique()]  ## only if the order of rows matters
       .reset_index()
    )
    

    输出:

                    A      B      C
    0  ^0hand(%s)leg$  27;33  42;54
    1  ^-(%s)hand0leg  39;30  47;57
    

    【讨论】:

    • 嗨@mozway感谢你的回答,但输出应该合并两个相似的列,在A列和B和C列应该是最大值,所以在这种情况下我的预期输出是:ABC ^ 0hand(%s)leg$ 27;33 42;54 ^-(%s)hand0leg 39;30 47;57 而不是 ABC 0 ^-(%s)hand0leg 39;30 47;57 1 ^0hand(%s) leg$ 24;33 39;54....任何指导都会有所帮助
    • 看起来像我的输出;)行的顺序重要吗?
    • 对不起,我忘了提及其他一些标准。实际上,上面的代码匹配部分匹配并显示例如第 1 行和第 3 行是部分匹配,因此它从第一行取两位数,从第一行取两位数最后一行并显示答案..so,如果 A 列没有匹配项,那么值应该显示为 ryt 但代码将 B 和 C 列显示为 Nan,表示 A 列不匹配,我忘了提及列D 列 D 将始终保持不变,因此代码显示 D 列的 NAN
    • ABCD ^0hand(%s)leg$ 36;21 21;42 EMC60 ^-(%s)hand0leg 24;45 21;42 EMC60 ^-(%s)hand^0hand(%s )leg$ 21;42;30 42;57;60 EMC60 任何线索都会有所帮助..谢谢
    • 当你有这样的操作和你不想触摸的额外列时,一个简单的方法是删除它们,执行操作,然后再次与 id 列上的原始数据合并(这里是 A)
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2014-12-27
    • 2021-07-09
    • 2018-04-09
    • 2019-05-26
    • 2020-07-02
    相关资源
    最近更新 更多