查找两列的最大值并根据条件在第三列中填充值

Find max of two columns and populate with value in third column based on a condition

我有一个包含 4 列的 pandas 数据框 - A、B、C、D 和 E。我想按 A 列创建组,然后找到 B 列和 C 列的最大值,然后用D 中存在的相应值,如下例所示。这里的条件是,如果 B 列中的一组全为 1,则 E 列将填充为 0。

我的预期输出

column A    column B    column C    column D    Column E
AA         1           a            12          15
AA         2           d            13          15
AA         3           b            14          15
AA         3           e            15          15
BB         1           c            15          17
BB         1           d            16          17
BB         2           b            17          17
BB         2           a            18          17
CC         1           a            11          0
CC         1           c            10          0
CC         1           b            11          0
CC         1           e            15          0

我的代码:

df1 = df1.sort_values(by=['column A', 'column B','column C','column D'],ascending=[True,False, False,False])
col_e_df = df1.groupby(['column A']).agg({'column D':['first']})
col_e__df = tranform_aggregated_data(col_e_df, {'first':  'column D'})
#print(col_e_df.sort_index())
df1 = df1.merge(col_e__df, on = ['column A'])

当数字大于 2 时,此代码工作正常,但是当 B 列的任何组都为 1 时,它不会填充 0(这是我需要做的)。当我添加 if 条件时,编号大于 2 的组也显示 0.

混乱的代码行

col_e_df = (np.where(df1['column B'] >= 2, df1.groupby(['column A'])['columnD'].transform('first') , 0))

The actual output from my code is
column A    column B    column C    column D    Column E
AA          1           a           12          0
AA          2           d           13          15
AA          3           b           14          15
AA          3           e           15          15
BB          1           c           15          0
BB          1           d           16          0
BB          2           b           17          17
BB          2           a           18          17
CC          1           a           11          0
CC          1           c           10          0
CC          1           b           11          0
CC          1           e           15          0

尝试:

df = df.sort_values(
    by=["column A", "column B", "column C", "column D"],
    ascending=[True, False, False, False],
)

df["Column E"] = df.groupby("column A")["column D"].transform("first")

# set "Column E" to 0 if all values in "column B" == 1
df["Column E"] = np.where(
    df.groupby("column A")["column B"].transform(lambda x: x.eq(1).all()),
    0,
    df["Column E"],
)
print(df.sort_index())

打印:

   column A  column B column C  column D  Column E
0        AA         1        a        12        15
1        AA         2        d        13        15
2        AA         3        b        14        15
3        AA         3        e        15        15
4        BB         1        c        15        17
5        BB         1        d        16        17
6        BB         2        b        17        17
7        BB         2        a        18        17
8        CC         1        a        11         0
9        CC         1        c        10         0
10       CC         1        b        11         0
11       CC         1        e        15         0