Python-将函数应用于分组数据帧

Python-将函数应用于分组数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,如下所示: A B C 0 foo 1.496337 -0.604264 1 bar -0.025106 0.257354 2 foo 0.958001 0.933328 3 foo -1.126581 0.570908 4 bar -0.428304 0.881995 5 foo -0.955252 1.408930 6 bar 0.504582 0.455287 7 bar -1.0

我有一个数据框,如下所示:

    A       B         C     
0  foo  1.496337 -0.604264  
1  bar -0.025106  0.257354 
2  foo  0.958001  0.933328 
3  foo -1.126581  0.570908
4  bar -0.428304  0.881995 
5  foo -0.955252  1.408930 
6  bar  0.504582  0.455287 
7  bar -1.076096  0.536741 
8  bar  0.351544 -1.146554 
9  foo  0.430260 -0.348472 
我想获得每组
B
列的最大值(按
A
分组时),并将其添加到
C
列中。以下是我尝试过的:

分组依据
A

df = df.groupby(by='A')
获取列
B
的最大值,然后尝试将其应用于列“C”:

for name in ['foo','bar']:
    maxi = df.get_group(name)['B'].max()
    df.get_group(name)['C'] = df.get_group(name)['C']+maxi

此时,请尝试使用.loc[row\u indexer,col\u indexer]=value来代替
。这是否意味着我必须对列
a
值上带有
if
的行使用
for
循环,并逐个修改
C
数据?我的意思是,这似乎不是熊猫式的,我觉得我错过了一些东西。如何更好地处理这个分组数据帧

此类操作使用转换或聚合完成。 在您的情况下,您需要
transform

# groupby 'A'
grouped = df.groupby('A')

# transform B so every row becomes the maximum along the group:
max_B = grouped['B'].transform('max')

# add the new column to the old df
df['D'] = df['A'] + max_B
或者在一行中:

In [2]: df['D'] = df.groupby('A')['B'].transform('max') + df['C']

In [3]: df
Out[3]: 
     A         B         C         D
0  foo  1.496337 -0.604264  0.892073
1  bar -0.025106  0.257354  0.761936
2  foo  0.958001  0.933328  2.429665
3  foo -1.126581  0.570908  2.067245
4  bar -0.428304  0.881995  1.386577
5  foo -0.955252  1.408930  2.905267
6  bar  0.504582  0.455287  0.959869
7  bar -1.076096  0.536741  1.041323
8  bar  0.351544 -1.146554 -0.641972
9  foo  0.430260 -0.348472  1.147865
有关详细信息,请参阅