我的数据框是:
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()
这是最干净的方式/最好的方法吗?
我不知道它有多大的改进,但如果你使用
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()