【问题标题】:Python - Find elements with same id in a dataframe and group together [duplicate]Python - 在数据框中查找具有相同 id 的元素并将其组合在一起[重复]
【发布时间】:2019-05-13 12:36:55
【问题描述】:

我有一个这样的数据框:

id  value1 value2
 0     1     1
 1     2     3
 2     1     4
 3     1     5
 4     2     1

我希望它是这样的:

id  value1 value2  count
 0     1     1,4,5   3
 1     2     3,1     2

【问题讨论】:

  • 列 value2 应该是什么数据类型?字符串?
  • 另外,您似乎想按 value1 分组,而不是按 id。

标签: python python-3.x pandas list


【解决方案1】:

通过agg 与join 和size 使用聚合,但有必要将列转换为字符串:

tups = [('value2', lambda x: ','.join(x.astype(str))), ('count', 'size')]
df1 = df.groupby('value1')['value2'].agg(tups).reset_index()
print (df1)
   value1 value2  count
0       1  1,4,5      3
1       2    3,1      2

替代方案:

tups = [('value2', ','.join), ('count', 'size')]
df1 = df['value2'].astype(str).groupby(df['value1']).agg(tups).reset_index()

【讨论】:

    【解决方案2】:

    类似的方法也可以:

    In [2468]: df.value2 = df['value2'].apply(str)
    
    In [2494]: res = df.groupby('value1')['value2'].apply(lambda x:','.join(x)).reset_index()
    
    In [2498]: res['count'] = df.groupby('value1').size().reset_index()[0]
    
    In [2499]: res
    Out[2499]: 
       value1 value2  count
    0       1  1,4,5      3
    1       2    3,1      2
    

    【讨论】:

    • 完美运行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 2018-06-15
    • 2018-12-19
    • 2016-11-03
    • 2020-07-30
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多