Python 如何仅更改数据帧中组的最大值

Python 如何仅更改数据帧中组的最大值,python,pandas,Python,Pandas,我有以下数据集 Item Count A 60 A 20 A 21 B 33 B 33 B 32 要复制的代码: import pandas as pd df = pd.DataFrame([ ['A', 60], ['A', 20], ['A', 21], ['B', 33], ['B', 33], ['B', 32], ], columns=['Item', 'Count']) 假设我只需要通过

我有以下数据集

Item Count
A    60
A    20
A    21
B    33
B    33
B    32
要复制的代码:

import pandas as pd
df = pd.DataFrame([
    ['A', 60],
    ['A', 20],
    ['A', 21],
    ['B', 33],
    ['B', 33],
    ['B', 32],
], 
    columns=['Item', 'Count'])
假设我只需要通过添加1来更改每组“Item”列的最大值

输出应如下所示:

Item Count New_Count
A    60    61
A    20    20
A    21    21
B    33    34
B    33    34
B    32    32
我尝试了
df['New_Count']=df.groupby(['Item'])['Count'].transform(lambda x:max(x)+1)
但是“Count”中的所有值都被每个组的最大值+1替换

Item Count New_Count
A    60    61
A    20    61
A    21    61
B    33    34
B    33    34
B    32    34
您可以使用获取每个组的最大idx,并仅递增这些项,如下所示:

Item Count New_Count
A    60    61
A    20    20
A    21    21
B    33    34
B    33    34
B    32    32
max_idxs=df.groupby(['Item'])['Count'].idxmax()
df['New_Count']=df['Count']#复制整个列
df['New_Count'][max_idxs]+=1#仅将每组的最大项目增加1
使用:

这只会增加每个组中第一次出现的最大值。 如果要在平局中增加所有最大值,可以使用。只需将上面的第一行替换为:

idx = df.groupby("Item")["Count"].transform(max) == df["Count"]

更改所有最大值中的值​​重复这些步骤,您将需要
.groupby()
.join()
np.where()

编辑 我们可以用@Dan建议的
.transform()
替换
.join()

df['newCount'] = df.groupby('Item')['Count'].transform('max')
df['newCount'] = np.where(df['Count'] != df['newCount'], df['Count'], (df['newCount'] + 1))
#output
    Item    Count   newCount
0   A       60      61
1   A       60      61
2   A       20      20
3   A       21      21
4   B       21      21
5   B       33      33
6   B       34      35

还有一种方法不是使用groupby,而是使用重复的

df.loc[~df.sort_values('Count', ascending=False).duplicated('Item'), 'Count'] += 1
输出:

  Item  Count
0    A     61
1    A     20
2    A     21
3    B     34
4    B     33
5    B     32

它可以工作,但是如果有2个或更多相同的最大值,那么它只会更改1个值。您的代码会触发一个错误消息,即设置CopyWarning
@YubrajBhusal我建议在您的问题中添加这样一个案例,以明确要求。您可以使用
transform
为此,请查看我的编辑以了解如何操作。Terry您说得对,我的熊猫有点生疏:P@Dan的答案是完美的,应该接受。@Dan感谢您的建议。我根据要求编辑了它,您可能可以使用它,而无需单独加入。@Dan感谢您的建议伴侣:)
  Item  Count
0    A     61
1    A     20
2    A     21
3    B     34
4    B     33
5    B     32