在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的数据框中分组和打印最大值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Perl 对相等的值进行分组并打印最小和最大参数?
python使用pandas计算dataframe中每个分组的极差分组数据的极差(range)使用groupby函数和agg函数计算分组的最大值和最小值