Pandas 如何按id对数据帧进行分组并将值​;在列表中具有相同的id,最后一行作为列

Pandas 如何按id对数据帧进行分组并将值​;在列表中具有相同的id,最后一行作为列,pandas,pandas-groupby,Pandas,Pandas Groupby,我的目标是按id对数据帧进行分组,并将列表中的前N行和每组的最后一行分别放在另一列中 我的数据帧: | id | val1| | 110 | A | | 110 | B | | 110 | 0 | | 220 | E | | 220 | F | | 220 | 1 | | 300 | H | | 300 | 2 | | id | val1 | val2| |110 | [A,B]| 0 | |220 | [E,F]| 1 | |300 | [H] |

我的目标是按id对数据帧进行分组,并将列表中的前N行和每组的最后一行分别放在另一列中

我的数据帧:

| id  | val1|
| 110 |  A  |
| 110 |  B  |
| 110 |  0  |
| 220 |  E  |
| 220 |  F  |
| 220 |  1  |
| 300 |  H  |
| 300 |  2  |
| id | val1 | val2|
|110 | [A,B]|  0  |
|220 | [E,F]|  1  |
|300 | [H]  |  2  |
我在找什么:

| id  | val1|
| 110 |  A  |
| 110 |  B  |
| 110 |  0  |
| 220 |  E  |
| 220 |  F  |
| 220 |  1  |
| 300 |  H  |
| 300 |  2  |
| id | val1 | val2|
|110 | [A,B]|  0  |
|220 | [E,F]|  1  |
|300 | [H]  |  2  |

对于
val1

s=pd.to_numeric(df.val1,errors='coerce')
df=df.assign(New=s.bfill())[s.isnull()].groupby('id').agg({'val1':list,'New':"first"})
df#df.reset_index(inplace=True)
       val1  New
id              
110  [A, B]  0.0
220  [E, F]  1.0
300     [H]  2.0

谢谢您的回答,但您的解决方案不起作用(TypeError:“type”对象不可编辑)。我正在使用Python3I,我不知道为什么它对我不起作用,但我通过更改aggregation.agg({'val1':lambda x:list(x),'New':'first')使它起作用