找到两列之间的最大值,其中其中一列被移动并更改最后一行的值

问题描述 投票:0回答:1

我的数据框是:

df = pd.DataFrame(
    {
       'a': [20, 9, 31, 40],
       'b': [1, 10, 17, 30],
    }
)

预期输出:创建列

c
name

    a   b   c    name
0  20   1  20    NaN
1   9  10  20    NaN
2  31  17  17    NaN
3  40  30  40    a 

步骤:

a)

c
是由
df['c'] = np.fmax(df['a'].shift().bfill(), df['b'])

创建的

b) 最后一行:

df['c'] = df[['a', 'b']].max()
。由于最后一行选择了
a > b
40。

c) 获取最后一行

a
b
之间的最大值的名称。

我的尝试:

df['c'] = np.fmax(df['a'].shift().bfill(), df['b'])
df.loc[df.index[-1], 'c'] = df.loc[df.index[-1], ['a', 'b']].max()
df.loc[df.index[-1], 'name'] = df.loc[df.index[-1], ['a', 'b']].idxmax()

这是最干净的方式/最好的方法吗?

python pandas dataframe
1个回答
1
投票

我不知道它有多大的改进,但如果你使用

agg()
,你可以将最后两行代码合并成一行。

df['c'] = np.fmax(df['a'].shift().bfill(), df['b'])
df.loc[df.index[-1], ['c', 'name']] = df.loc[df.index[-1], ['a', 'b']].agg(['max', 'idxmax']).to_numpy()
© www.soinside.com 2019 - 2024. All rights reserved.