我有一个数据框,我想根据两列中的值添加一个新列,其中一列使用组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
上的分组等于"是的"。
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)。任何指针都将非常感激。
答案 0 :(得分:3)
您可以将a
作为DataFrame返回,其索引与应用该函数的组相同。
labels