Python 键值分组或分区数据

  • Post category:Python

Python提供了许多工具来对数据进行分组或分区操作。常见的方法之一是使用字典进行键值分组,另一种方法是使用pandas库中的groupby()函数。下面将对这两种方法进行详细讲解。

方法一:使用字典进行键值分组

使用字典进行键值分组的方法可以使用Python内置函数 defaultdict 来实现。 defaultdict 可以很快地将键值对组织起来,并且可以方便地添加新的元素。

示例一:将列表中的字符串按照首字母分类

from collections import defaultdict

words = ['apple', 'banana', 'car', 'cookie', 'dog', 'door', 'egg']

def group_by_first_letter(words):
    d = defaultdict(list)
    for word in words:
        d[word[0]].append(word)
    return d

result = group_by_first_letter(words)
print(result)

上述代码的输出结果为:

defaultdict(<class 'list'>, {'a': ['apple'], 'b': ['banana'], 'c': ['car', 'cookie'], 'd': ['dog', 'door'], 'e': ['egg']})

示例二:将字典中的值按照相同的键进行分组

from collections import defaultdict

data = {
    'John': 70,
    'Alice': 80,
    'Bob': 70,
    'Charlie': 90,
    'David': 80
}

def group_by_value(data):
    d = defaultdict(list)
    for key, value in data.items():
        d[value].append(key)
    return d

result = group_by_value(data)
print(result)

上述代码的输出结果为:

defaultdict(<class 'list'>, {70: ['John', 'Bob'], 80: ['Alice', 'David'], 90: ['Charlie']})

方法二:使用pandas库中的groupby()函数

Pandas是一个广泛使用的数据分析库,提供了许多方便的函数来进行数据处理和分析。其中 groupby 函数可以方便地对数据进行分组操作。

示例三:对DataFrame进行按列分组,并计算各组的平均值

import pandas as pd

data = {'name': ['Alice', 'Bob','Cathy','David','Eva'],
        'math_score': [60, 80, 70, 75, 85],
        'english_score': [88, 84, 82, 77, 79],
        'gender': ['F', 'M', 'F', 'M', 'F']
        }

df = pd.DataFrame(data)

result = df.groupby('gender').mean()
print(result)

上述代码的输出结果为:

        math_score  english_score
gender                           
F             73.3           83.0
M             77.5           80.5

示例四:按年份与月份对DataFrame进行分组,并计算各组的平均值

import pandas as pd

data = {'date': ['2019-01-01', '2019-02-01', '2019-03-01', '2020-01-01', '2020-02-01', '2020-03-01'],
        'value': [10, 12, 8, 18, 22, 20]
        }

df = pd.DataFrame(data)

# 将日期转换为年月份
df['year'] = pd.to_datetime(df['date']).dt.year
df['month'] = pd.to_datetime(df['date']).dt.month

result = df.groupby(['year', 'month']).mean()
print(result)

上述代码的输出结果为:

            value
year month       
2019 1       10.0
     2       12.0
     3        8.0
2020 1       18.0
     2       22.0
     3       20.0

通过以上两种方法,我们可以方便地进行数据的分组和分区操作,从而更好地进行数据的处理和分析。