从DataFrame中删除重复的行,但保留一列作为列表-Python

从DataFrame中删除重复的行,但保留一列作为列表-Python,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有这样一个数据帧: file: | FIRST | LAST | ID | --------------------------- 0 "ABC" 12 35 1 "ABC" 14 35 2 "AB" 15 36 现在,我想要的是: file: | FIRST | LAST | ID | --------------------------- 0 "ABC" [12,14]

我有这样一个数据帧:

file:
      | FIRST | LAST | ID |
---------------------------
0      "ABC"     12    35 
1      "ABC"     14    35
2      "AB"      15    36
现在,我想要的是:

file:
      | FIRST | LAST  | ID |
---------------------------
0      "ABC"   [12,14]  35 
2      "AB"      15     36
对于这个问题,我们假设如果两行的ID相等,那么除LAST之外的所有值也相等

因此,替换除添加到列表中的last值以外的所有值

我尝试使用此链接中给出的解决方案:

我用了这个:

file = file.groupby('ID')

file = file['Last'].unique()
这是我得到的输出:

ID
35    [12, 14]
36        [15]
Name: Last, dtype: object
可能我在groupby()中遗漏了一些内容

提前感谢:)

更新:

我最初的Dataframe有100多列。 如果两行的ID相等,则除LAST之外的所有值也相等。

这是您想要的吗

df.groupby(['FIRST', 'ID']).LAST.apply(lambda x: x.tolist()).reset_index()

    FIRST   ID  LAST
0   AB      36  [15]
1   ABC     35  [12, 14]

如果给定ID只有最后两行不同,那么对它们应用groupby时只需取第一个值。对于“LAST”列,使用其值,如果有多个项目,则将其转换为唯一项目列表

grouping_cols = ['ID', ...]
agg_cols = {col: 'first' for col in df if col not in grouping_cols}
agg_cols['LAST'] = lambda x: x.unique().tolist() if len(x) > 1 else x.iat[0]
>>> df.groupby(grouping_cols, as_index=False).agg(agg_cols)
  ID      LAST FIRST
0  35  [12, 14]   ABC
1  36        15    AB

我的Dataframe有100多列,所以当我将['First','ID']放入groupby时,所有其他列都不在其中。在这种情况下,即使是其他列也需要聚合,您希望它们也在列表中吗?正如我在问题中提到的,如果两行的ID值相等,那么所有其他列值也相等,除了LAST。如果我想使用多列来groupby()呢?这就是我得到的:ValueError:函数不减少