在python的数据框中分组和打印最大值

Posted

技术标签:

【中文标题】在python的数据框中分组和打印最大值【英文标题】:grouping and printing the maximum in a dataframe in 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

任何线索都会有所帮助

【问题讨论】:

【参考方案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)

以上是关于在python的数据框中分组和打印最大值的主要内容,如果未能解决你的问题,请参考以下文章

提取数据框中每个组内的最大值[重复]

对 pandas 数据框中的连续值进行分组

如何使用 Perl 对相等的值进行分组并打印最小和最大参数?

查找分组最大值并在 R 中打印相关行

python使用pandas计算dataframe中每个分组的极差分组数据的极差(range)使用groupby函数和agg函数计算分组的最大值和最小值

Python - 熊猫,分组和最大计数