Python:计算两列内值的组合并找到每个组合的最大频率

标签 python pandas dataframe calculated-columns

我的 pandas 数据框如下所示:

+-----+---------+-------+
| No. | Section | Group |
+-----+---------+-------+
| 123 |     222 |     1 |
| 234 |     222 |     1 |
| 345 |     222 |     1 |
| 456 |     222 |     3 |
| 567 |     241 |     1 |
| 678 |     241 |     2 |
| 789 |     241 |     2 |
| 890 |     241 |     3 |
+-----+---------+-------+

首先,我需要添加另一列,其中包含部分每种组合的频率。保留所有行非常重要。

期望的输出:

+-----+---------+-------+-------+
| No. | Section | Group | Count |
+-----+---------+-------+-------+
| 123 |     222 |     1 |     3 |
| 234 |     222 |     1 |     3 |
| 345 |     222 |     1 |     3 |
| 456 |     222 |     3 |     1 |
| 567 |     241 |     1 |     1 |
| 678 |     241 |     2 |     2 |
| 789 |     241 |     2 |     2 |
| 890 |     241 |     3 |     1 |
+-----+---------+-------+-------+

第二步是标记每个部分Count内的最高值。例如,对于像这样的 True/False 列:

+-----+---------+-------+-------+-------+
| No. | Section | Group | Count |  Max  |
+-----+---------+-------+-------+-------+
| 123 |     222 |     1 |     3 | True  |
| 234 |     222 |     1 |     3 | True  |
| 345 |     222 |     1 |     3 | True  |
| 456 |     222 |     3 |     1 | False |
| 567 |     241 |     1 |     1 | False |
| 678 |     241 |     2 |     2 | True  |
| 789 |     241 |     2 |     2 | True  |
| 890 |     241 |     3 |     1 | False |
+-----+---------+-------+-------+-------+

原始数据框有很多行。这就是为什么我要求一种有效的方法,因为我想不出一种方法。

非常感谢!

最佳答案

看看变换

df['Count']=df.groupby(['Section','Group'])['Group'].transform('size')
df['Max']=df.groupby(['Section'])['Count'].transform('max')==df['Count']
df
Out[508]: 
    No  Section  Group  Count    Max
0  123      222      1      3   True
1  234      222      1      3   True
2  345      222      1      3   True
3  456      222      3      1  False
4  567      241      1      1  False
5  678      241      2      2   True
6  789      241      2      2   True
7  890      241      3      1  False

关于Python:计算两列内值的组合并找到每个组合的最大频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49266390/

相关文章:

python - 如何在pandas中选择多个具有间隔的连续行?

python - Pandas 系列改造

python - 如何在两个值之间随机选择?

python - 在 python pandas 中将高度(英尺和英寸)更改为整数

Python functools.partial - 如何使用静态装饰器将其应用于类方法

python - 根据索引选择固定数据帧范围并附加到新数据帧

python - 如何使用 get_dummies 或一种热编码来编码具有多个元素的分类特征?

python - 如何检查数据框中是否存在值

python - 将 Markdown 渲染为 HTML,同时保留标题、换行符等?

python - 将多个参数传递给python中的函数的方法