首页 > 解决方案 > 使用涉及 shift() 的其他列的最大值创建一个新的 df 列

问题描述

我有一个DF如下:

d1=pd.DataFrame({'a':[0,1,0,1,2,4,5,1,7,8,0],'b':[0,1,2,4,5,7,1,3,1,0,1]})

在此处输入图像描述

我想生成一个名为'new' 的新列,它基于a 列的最大值和b 列的前一行值(即'b' shift())。

我尝试执行以下操作:

df'[new']=df[['a',df['b'].shift()]].max(axis=1)

然而我得到了一些可变的错误信息。

我想要的输出如下:

在此处输入图像描述

标签: pythonpandaslistdictionary

解决方案


IIUC,你可以试试:

df['new_col'] = df.assign(b = df['b'].shift(fill_value = 0)).max(axis =1)

输出:

    a  b  new_col
0   0  0        0
1   1  1        1
2   0  2        1
3   1  4        2
4   2  5        4
5   4  7        5
6   5  1        7
7   1  3        1
8   7  1        7
9   8  0        8
10  0  1        0

注意:如果您想更具体地了解这些列。

df['new_col'] = df.assign(b=df['b'].shift(fill_value=0))[
    ['a', 'b']].max(axis=1)
df['new_col'] = pd.concat([df['b'].shift(fill_value=0), df['a']], 1).max(1)

推荐阅读