0%

Python Pandas groupby with count, sum, and avg etc

我们要对一个 DataFrame 做分组统计时,其实跟 SQL 语句的逻辑是差不多的。

groupby.sum(), groupby.count() 等等。

如果要把一个 DataFrame 里的不同列各做 sum(), count() 该如何操作呢?在这里给大家做一个演示。

1
2
3
4
5
6
7
8
9
# 原始数据
keyword_list = ['dog', 'cat', 'horse', 'dog', 'dog', 'horse']
weight_list = [0.12, 0.5, 0.07, 0.1, 0.2, 0.3]
other_keywords_list = [['cat', 'horse', 'pig'], ['dog', 'pig', 'camel'], ['dog', 'camel', 'cat'], ['cat', 'horse'], ['cat', 'horse', 'pig'], ['camel']]

# 生成DataFrame
dict = {'keyword': keyword_list, 'weight': weight_list, 'other keywords': other_keywords_list}
animaldf = pd.DataFrame(data=dict)
animaldf
  keyword weight other keywords
0 dog 0.12 [cat, horse, pig]
1 cat 0.50 [dog, pig, camel]
2 horse 0.07 [dog, camel, cat]
3 dog 0.10 [cat, horse]
4 dog 0.20 [cat, horse, pig]
5 horse 0.30 [camel]
1
2
df = animaldf.groupby('keyword').agg({'keyword': 'count', 'weight': 'sum', 'other keywords': 'sum'})
df
  keyword weight other keywords
keyword
cat 1 0.50 [dog, pig, camel]
dog 3 0.42 [cat, horse, pig, cat, horse, cat, horse, pig]
horse 2 0.37 [dog, camel, cat, camel]

这样就已经达到效果了。

如果接下来要继续对数据进行处理,可以先把 index 的名字 keyword 去掉,不去掉的话,转成列时就和现有列 keyword 名字冲突了。

然后把索引转换成列。

1
2
df.index.name = None
df.reset_index()

最后你想把列改成什么名字就随你了。