根据组最大值在DataFrame列中指定新值

时间:2016-05-10 22:03:05

标签: python numpy pandas

我有一个数据框,我想根据两列中的值添加一个新列,其中一列使用组max。例如,这是一个示例DataFrame

import pandas as pd
import numpy as np


df = pd.DataFrame({"col1": ['a'] * 2 + ['b'] * 4,
                   "col2": [1, 2, 1, 2, 3, 4],
                   "col3": ['yep', 'no', 'no', 'no', 'yep', 'yep']})


df
  col1  col2 col3
0    a     1  yep
1    a     2   no
2    b     1   no
3    b     2   no
4    b     3  yep
5    b     4  yep

现在,我想要的是一个新的专栏,上面写着"是"其中col2是最大组,col1col3上的分组等于"是的"。

  col1  col2 col3 col4
0    a     1  yep  no
1    a     2   no  no
2    b     1   no  no
3    b     2   no  no
4    b     3  yep  no
5    b     4  yep  yes

我已尝试过以下代码,但我在返回值上遇到轻微错误:

# define function
def max_bal(df):
    max_row = df['col2'].max()
    label = np.where((df['col3'] == 'yep') & 
                     (df['col2'] == max_row),
                     'Yes', 
                     'No')
    return label

现在按组声明

调用函数
df.groupby('col1').apply(max_bal)

col1
a             [No, No]
b    [No, No, No, Yes]
dtype: object

这些是正确的值,但未按照我的预期在Series中返回。我需要一个Series / array / list,因为我尝试将这些值分配给上面df中的新列(请参阅`COL4&#39)。任何指针都将非常感激。

1 个答案:

答案 0 :(得分:3)

您可以将a作为DataFrame返回,其索引与应用该函数的组相同。

labels