Python中对GroupBy结果应用transform函数的原理解析
Pandas中GroupBy结合transform函数的工作原理解释
示例代码
import pandas as pd data = { 'Name': ['Alice', 'Alice', 'Charlie', 'Charlie'], 'Age': [25, 30, 35, 40], 'branch': ['New York', 'Los Angeles', 'Chicago', 'Houston'] } df = pd.DataFrame(data) # 拼接字符串 df['branch'] = df.groupby(['Name'])['branch'].transform(lambda x : ' '.join(x)) # 展示数据框 print(df)
运行输出
| Name | Age | branch |
|---|---|---|
| Alice | 25 | New York Los Angeles |
| Alice | 30 | New York Los Angeles |
| Charlie | 35 | Chicago Houston |
| Charlie | 40 | Chicago Houston |
具体工作逻辑拆解
当你对GroupBy结果应用transform时,整个流程分三步走:
- 分组拆分:先按照指定的列(这里是
Name)把原DataFrame拆成独立分组——所有Name为Alice的行归为一组,Charlie的行归为另一组。 - 组内执行计算:对每个分组单独运行你传入的函数。这里的
lambda x: ' '.join(x)会把分组里的branch字段所有字符串拼接成一个长串:Alice组的['New York', 'Los Angeles']变成New York Los Angeles,Charlie组的['Chicago', 'Houston']变成Chicago Houston。 - 对齐回填结果:把每个分组的计算结果,按照原DataFrame的行顺序,回填到对应行的位置。也就是说,原数据里属于Alice的每一行,都会被填上Alice组的拼接结果;Charlie的每一行同理。这就是为什么同一姓名的两行
branch值完全一致——它们共享同一个分组计算的结果。
和apply不同,transform要求返回的结果能和原分组的行数匹配(或者可以自动广播到相同行数),这样才能完美对齐原DataFrame的行结构,不会改变数据的总行数和索引。
内容的提问来源于stack exchange,提问作者Ujjawal
相关产品推荐
相关产品推荐

