Pandas 如何按id对数据帧进行分组并将值;在列表中具有相同的id,最后一行作为列
我的目标是按id对数据帧进行分组,并将列表中的前N行和每组的最后一行分别放在另一列中 我的数据帧: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 | 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')使它起作用