我有一个数据框
A|b|c
-|-|
1|6|11
1|7|12
两个|8|23
两个|9个|14个
三个|10个|15个
三个|20个|25个
我希望应用groupby at column a
,然后找到highest value in column c
,以便标记最高值,即
A|b|c
-|-|
1|6|11
1|7|12
比较值11和12,然后
A|b|c
-|-|
两个|8|23
两个|9个|14个
比较值23和14,然后
A|b|c
-|-|
三个|10个|15个
三个|20个|25个
最终导致:
A|b|c|标志
-|-|
1|6|11|否
1|7|12|是
两个|8|23|是
二|9|14|否
三|10|15|否
三个|20|25|是
I/P DF:
df = pd.DataFrame({
'a':["one","one","two","two","three","three"]
, 'b':[6,7,8,9,10,20]
, 'c':[11,12,23,14,15,25]
# , 'flag': ['no', 'yes', 'yes', 'no', 'no', 'yes']
})
df
3条答案
按热度按时间lokaqttq1#
您可以使用
groupby.transform
获取每个组的最大值,并使用numpy.where
将True
/False
Map到'yes'
/'no'
:输出:
中间体:
e4yzc0pl2#
使用
GroupBy.transform
和max
,比较到同一列c
,然后在numpy.where
中设置yes/no
:如果每个
a
具有最大值的多个值得到多个yes
,如果只需要第一个最大值,则使用DataFrameGroupBy.idxmax
并比较df.index
:kt06eoxx3#
这样做的一种方法如下
分解上面正在做的各种步骤
df['flag']
创建名为flag
的新列。df.groupby('a')['c'].max()
将按列a
和pandas.DataFrame.groupby
分组,并在列c
中查找最大值。备注:
.apply
可能会很慢,即使可以工作,也可能不是最方便的方式。