1. df.groupby(['team', df.name.str[0]])
-
df.groupby(['team', df.name.str[0]])
这一部分代码表示对 DataFramedf
按照 两个条件 进行分组:- 按照
'team'
列(即团队)。 - 按照
'name'
列的 首字母(df.name.str[0]
)。
- 按照
-
df.name.str[0]
使用了str
访问器和.str[0]
索引来获取'name'
列中每个名字的首字母。例如,如果某个名字是 “Alice”,那么df.name.str[0]
就会返回'A'
。 -
因此,分组后的结果是按团队(
team
)和每个人姓名的首字母进行二重分组。
2. grouped2.get_group(('B', 'A'))
grouped2.get_group(('B', 'A'))
表示从已经按team
和name
首字母分组的结果中,选出team
为B
且姓名首字母为A
的组。get_group(('B', 'A'))
方法返回的是符合条件的组的 DataFrame 数据。
示例:
假设你有如下的 DataFrame df
:
import pandas as pd# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],'team': ['A', 'B', 'A', 'B', 'A'],'score': [90, 80, 85, 95, 88]
}
df = pd.DataFrame(data)print(df)
输出:
name team score
0 Alice A 90
1 Bob B 80
2 Charlie A 85
3 David B 95
4 Eva A 88
执行 grouped2 = df.groupby(['team', df.name.str[0]])
grouped2 = df.groupby(['team', df.name.str[0]])
这将按照 team
和姓名首字母进行分组,得到一个分组对象。现在,grouped2
是一个包含多个组的 GroupBy
对象。
执行 grouped2.get_group(('B', 'A'))
grouped2.get_group(('B', 'A'))
这行代码会选出 team
为 B
且姓名首字母为 A
的分组。输出将是:
name team score
1 Bob B 80
解释:
team
为B
且姓名首字母为A
的数据只有Bob
,因此返回的结果是一个 DataFrame,其中只包含Bob
这一行数据。
完整代码
import pandas as pd# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],'team': ['A', 'B', 'A', 'B', 'A'],'score': [90, 80, 85, 95, 88]
}
df = pd.DataFrame(data)print(df)grouped2 = df.groupby(['team', df.name.str[0].str.upper()]) # 确保首字母是大写
print(grouped2.groups)grouped2.get_group(('B', 'B'))
输出:
总结:
df.groupby(['team', df.name.str[0]])
:按团队 (team
) 和姓名的首字母 (df.name.str[0]
) 进行二重分组。get_group(('B', 'A'))
:获取team
为B
且姓名首字母为A
的分组数据。在本例中,只有Bob
这一行符合条件,因此返回该行数据。
这种方法非常有用,可以实现更复杂的分组,比如按某一列的部分值(如首字母、日期的月或周等)进行分组。
补充:
分组对象的groups方法会生成一个字典(其实是Pandas定义的PrettyDict),这个字典包含分组的名称和分组的内容索引列表,然后我们可以使用字典的.keys()方法取出分组名称:
import pandas as pd# 创建一个示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],'team': ['A', 'B', 'A', 'B', 'A'],'score': [90, 80, 85, 95, 88]
}
df = pd.DataFrame(data)print(df,'\n')
grouped = df.drop('name', axis=1).groupby('team')
result = grouped.sum()
print(result,'\n')
print(df.groupby('team').groups,'\n')
print(df.groupby('team').groups.keys(),'\n')
输出: