我的数据框是:
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()
.要创建副本,我们可以定义一个标记最后一行以及
assign()
“c”和“name”列的掩码。