我有这种格式的列表:
['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])
,但通常会删除所有未分组的列。
答案 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()