这里举的例子是:
- 按姓名首字母分组
python
df.groupby(df.name.str[0])
- 按A及B、其他团队分组
python
df.groupby(df.team.isin(['A','B']))
- 按姓名第一个字母和第二个字母分组
python
df.groupby([df.name.str[0], df.name.str[1]])
- 按日期和小时分组
python
df.groupby([df.time.date, df.time.hour])
这些示例展示了如何使用 groupby
按不同的列值进行分组,每个分组的规则都是基于字符串的处理、布尔值判断或者日期时间的提取。下面我逐一解释每个示例:
1. 按姓名首字母分组
python
df.groupby(df.name.str[0])
-
作用 :这个
groupby
操作通过提取name
列的每个值的首字母来进行分组。 -
df.name.str[0]
会提取name
列中每个字符串的第一个字符(即首字母),并基于这些首字母来进行分组。假设
name
列的数据是:['Alice', 'Bob', 'Charlie', 'David', 'Eve']
,那么df.name.str[0]
将返回:['A', 'B', 'C', 'D', 'E']
。 -
示例:
pythondf = pd.DataFrame({ 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'], 'age': [25, 30, 35, 40, 45] }) result = df.groupby(df.name.str[0]).sum() print(result)
输出:
age name A 25 B 30 C 35 D 40 E 45
2. 按 A及B、其他团队分组
python
df.groupby(df.team.isin(['A', 'B']))
-
作用 :这个
groupby
操作通过team
列判断每个值是否属于'A'
或'B'
团队来进行分组。 -
df.team.isin(['A', 'B'])
返回一个布尔系列,对于每个team
列中的值,如果它是'A'
或'B'
,则返回True
,否则返回False
。假设
team
列的数据是:['A', 'B', 'C', 'A', 'D']
,那么df.team.isin(['A', 'B'])
将返回:[True, True, False, True, False]
。 -
示例:
pythondf = pd.DataFrame({ 'team': ['A', 'B', 'C', 'A', 'D'], 'score': [80, 90, 85, 95, 70] }) result = df.groupby(df.team.isin(['A', 'B'])).sum() print(result)
输出:
score team False 155 True 265
True
表示A
和B
团队的分组,False
表示其他团队的分组。
3. 按姓名第一个字母和第二个字母分组
python
df.groupby([df.name.str[0], df.name.str[1]])
-
作用 :这个
groupby
操作通过提取name
列中每个值的前两个字母来进行分组。 -
df.name.str[0]
提取第一个字母,df.name.str[1]
提取第二个字母。两个字母作为分组的依据。假设
name
列的数据是:['Alice', 'Alex', 'Bob', 'Charlie', 'Eve']
,那么df.name.str[0]
返回['A', 'A', 'B', 'C', 'E']
,df.name.str[1]
返回['l', 'l', 'o', 'h', 'v']
。 -
示例:
pythondf = pd.DataFrame({ 'name': ['Alice', 'Alex', 'Bob', 'Charlie', 'Eve'], 'age': [25, 30, 35, 40, 45] }) result = df.groupby([df.name.str[0], df.name.str[1]]).sum() print(result)
输出:
age name name A l 55 B o 35 C h 40 E v 45
- 这里每个分组的标识由姓名的前两个字母组成。
4. 按日期和小时分组
python
df.groupby([df.time.date, df.time.hour])
-
作用 :这个
groupby
操作首先提取time
列中的日期部分(去掉时间),然后提取小时部分(24小时制)。 -
df.time.date
提取日期部分,df.time.hour
提取小时部分。这样你可以按照日期和小时来对数据进行分组。假设
time
列的数据是:['2025-01-01 10:20:00', '2025-01-01 11:30:00', '2025-01-02 10:45:00']
,那么df.time.date
会返回:['2025-01-01', '2025-01-01', '2025-01-02']
,df.time.hour
会返回:[10, 11, 10]
。 -
示例:
python
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
'time': pd.to_datetime(['2025-01-01 10:20:00', '2025-01-01 11:30:00', '2025-01-02 10:45:00']),
'value': [100, 200, 300]
})
print(df,'\n\n')
# 按日期和小时分组,并对value列进行求和
result = df.groupby([df.time.dt.date, df.time.dt.hour])['value'].sum()
print(result)
输出:
- 这里的数据是按照日期和小时分组的,结果是每个日期和小时组合下的
value
总和。
总结
- 按姓名首字母分组:通过字符串的第一个字母来分组。
- 按 A及B、其他团队分组 :通过判断某个列的值是否属于特定集合(例如
'A'
和'B'
)来分组。 - 按姓名的前两个字母分组:通过字符串的前两个字母来分组。
- 按日期和小时分组 :通过日期和小时来分组,适用于处理
datetime
类型数据。
这些方法展示了 groupby
操作的灵活性,可以根据不同的条件对数据进行分组和聚合处理。