首页 > 解决方案 > 将 pandas 中的列值分组并将其他列值放入列表中

问题描述

我有一个熊猫数据框:

 col1   col2   col3

  a      NaN    NaN
  b      1       2
  b      3       4
  c      5       6

我想把它改成这样的数据框:

 col1    col2  col3
  a      NaN      NaN
  b     [1,3]    [2,4]
  c       5       6

有没有一种简单的方法可以实现这一目标?

标签: pythonpandas

解决方案


仅当长度较大时,您才需要为列表自定义 lambda 函数,例如1

df1 = df.groupby('col1').agg(lambda x: list(x) if len(x) > 1 else x).reset_index()
print (df1)
  col1        col2        col3
0    a         NaN         NaN
1    b  [1.0, 3.0]  [2.0, 4.0]
2    c         5.0         6.0

因为如果按列表聚合也得到一个元素列表:

print (df.groupby('col1').agg(list))
            col2        col3
col1                        
a          [nan]       [nan]
b     [1.0, 3.0]  [2.0, 4.0]
c          [5.0]       [6.0]

推荐阅读