Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于组最大值在DataFrame列中分配新值_Python_Numpy_Pandas - Fatal编程技术网

Python 基于组最大值在DataFrame列中分配新值

Python 基于组最大值在DataFrame列中分配新值,python,numpy,pandas,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

我有一个数据框,我想根据两列中的值添加一个新列,其中一列使用组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
是组的最大值,在
col1
col3
上分组等于“是”

我尝试了下面的代码,但返回值有一点错误:

# 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
现在在GROUPBY语句中调用函数

df.groupby('col1').apply(max_bal)

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

这些是正确的值,但没有像我预期的那样在
系列中返回。我需要一个
系列
/
数组
/
列表
,因为我正试图将这些值分配给上面
df
中的一个新列(请参见“col4”)。任何指针都将不胜感激。

您可以将
标签作为数据帧返回,其索引与应用该函数的组相同

def max_bal(df):
    max_row = df['col2'].max()
    labels = np.where((df['col3'] == 'yep') & 
                     (df['col2'] == max_row),
                     'Yes', 
                     'No')
    return pd.DataFrame(labels, index=df.index)

df['col4'] = df.groupby('col1').apply(max_bal)

这是可行的,但为什么呢?我正在学习Python/pandas,我正在尝试用指定的原始数据帧索引来弥补我最初的尝试和数据帧解决方案之间的差距。
def max_bal(df):
    max_row = df['col2'].max()
    labels = np.where((df['col3'] == 'yep') & 
                     (df['col2'] == max_row),
                     'Yes', 
                     'No')
    return pd.DataFrame(labels, index=df.index)

df['col4'] = df.groupby('col1').apply(max_bal)