使用pandas合并和聚合列表条目,而不删除字段

时间:2017-04-24 12:45:47

标签: python pandas

我有这种格式的列表:

['bear', 'brown', 'mammal', 1233],
['cat', 'black', 'mammal', 1533],
['bear', 'brown', 'mammal', 2345],
['bear', 'black', 'mammal', 2345]

如果前三个字符串相同,我想在末尾聚合数字并删除重复的条目。这样:

['bear', 'brown', 'mammal', 3578],
['cat', 'black', 'mammal', 1533],
['bear', 'black', 'mammal', 2345]

我知道如何使用pandas .groupby([0]),但通常会删除所有未分组的列。

3 个答案:

答案 0 :(得分:3)

In [137]: pd.DataFrame(d).groupby([0,1,2]).sum().reset_index().values.tolist()
Out[137]:
[['bear', 'black', 'mammal', 2345],
 ['bear', 'brown', 'mammal', 3578],
 ['cat', 'black', 'mammal', 1533]]

其中d是一个列表:

In [138]: d
Out[138]:
[['bear', 'brown', 'mammal', 1233],
 ['cat', 'black', 'mammal', 1533],
 ['bear', 'brown', 'mammal', 2345],
 ['bear', 'black', 'mammal', 2345]]

答案 1 :(得分:3)

确保将列表放入数据框

df = pd.DataFrame([
        ['bear', 'brown', 'mammal', 1233],
        ['cat', 'black', 'mammal', 1533],
        ['bear', 'brown', 'mammal', 2345],
        ['bear', 'black', 'mammal', 2345]
    ])

使用groupby + sum

df.groupby([0, 1, 2])[3].sum().reset_index()


      0      1       2     3
0  bear  black  mammal  2345
1  bear  brown  mammal  3578
2   cat  black  mammal  1533

要取回你的清单......请参阅@ MaxU的回答。

答案 2 :(得分:2)

import pandas as pd
#add data to a dataframe
df = pd.DataFrame(columns=['A','B','C','D'], 
                  data = [['bear', 'brown', 'mammal', 1233],
                        ['cat', 'black', 'mammal', 1533],
                        ['bear', 'brown', 'mammal', 2345],
                        ['bear', 'black', 'mammal', 2345]])
#group the dataframe and sum the last column    
df.groupby(by=['A','B','C']).sum().reset_index().values.tolist()