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



我有一个pandas数据帧,有4列-a、B、C、D和E。我想按列a创建组,然后找到列B和C的最大值,然后用D中的相应值填充E,如下例所示。这里的条件是,如果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

最新更新