Python 基于组最大值在DataFrame列中分配新值
我有一个数据框,我想根据两列中的值添加一个新列,其中一列使用组max。例如,这里有一个示例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
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)