Python:计算两列中值的组合,并找出每个组合的最大频率

问题描述 投票:2回答:1

我的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 |
+-----+---------+-------+

首先,我需要添加另一个列,其中包含Section和Group的每个组合的频率。保留所有行很重要。

期望的输出:

+-----+---------+-------+-------+
| 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 |
+-----+---------+-------+-------+-------+

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

非常感谢你!

python pandas dataframe calculated-columns
1个回答
4
投票

看看transform

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
© www.soinside.com 2019 - 2024. All rights reserved.