-
apply 传入的为DataFrame,transform和agg传入的为Series。
-
可通过打印传入的参数,进行本质比较,DF和Series可做的操作不同;如列相加只能DF。
-
transform返回值其索引和列与原始DataFrame相同,agg必为聚会结果及组数,apply看具体应用函数的行为即可能为与原大小一样,也可能为聚合后的即只有组数。
-
apply举例,传入DF,即可返回聚合大小,也可返回原大小。
-
import pandas as pd data = { 'user_id': [1, 2, 3, 4, 5, 6], '渠道': ['Alipay', 'WeiChat', 'Alipay', 'WeiChat', 'Alipay', 'WeiChat'], '金额': [100, 150, 120, 180, 90, 200] } df = pd.DataFrame(data) def convert(item): print(item) print('*'*50) return item.max() df2 = df.groupby(['渠道']).apply(convert) print(df2) '''output user_id 渠道 金额 0 1 Alipay 100 2 3 Alipay 120 4 5 Alipay 90 ************************************************** user_id 渠道 金额 1 2 WeiChat 150 3 4 WeiChat 180 5 6 WeiChat 200 ************************************************** user_id 渠道 金额 渠道 Alipay 5 Alipay 120 WeiChat 6 WeiChat 200 ''' -
import pandas as pd data = { 'user_id': [1, 2, 3, 4, 5, 6], '渠道': ['Alipay', 'WeiChat', 'Alipay', 'WeiChat', 'Alipay', 'WeiChat'], '金额': [100, 150, 120, 180, 90, 200] } df = pd.DataFrame(data) def convert(item): print(item) print('*'*50) return item df2 = df.groupby(['渠道']).apply(convert) print(df2) '''output user_id 渠道 金额 0 1 Alipay 100 2 3 Alipay 120 4 5 Alipay 90 ************************************************** user_id 渠道 金额 1 2 WeiChat 150 3 4 WeiChat 180 5 6 WeiChat 200 ************************************************** user_id 渠道 金额 0 1 Alipay 100 1 2 WeiChat 150 2 3 Alipay 120 3 4 WeiChat 180 4 5 Alipay 90 5 6 WeiChat 200 ''' -
agg举例 传入Series,返回聚合大小。
-
import pandas as pd data = { 'user_id': [1, 2, 3, 4, 5, 6], '渠道': ['Alipay', 'WeiChat', 'Alipay', 'WeiChat', 'Alipay', 'WeiChat'], '金额': [100, 150, 120, 180, 90, 200] } df = pd.DataFrame(data) def convert(item): print(item) print('*'*50) return item.max() df2 = df.groupby(['渠道']).agg(convert) print(df2) '''ouotput 0 1 2 3 4 5 Name: user_id, dtype: int64 ************************************************** 1 2 3 4 5 6 Name: user_id, dtype: int64 ************************************************** 0 100 2 120 4 90 Name: 金额, dtype: int64 ************************************************** 1 150 3 180 5 200 Name: 金额, dtype: int64 ************************************************** user_id 金额 渠道 Alipay 5 120 WeiChat 6 200 ''' -
transform举例 传入Series,返回原大小
-
import pandas as pd data = { 'user_id': [1, 2, 3, 4, 5, 6], '渠道': ['Alipay', 'WeiChat', 'Alipay', 'WeiChat', 'Alipay', 'WeiChat'], '金额': [100, 150, 120, 180, 90, 200] } df = pd.DataFrame(data) def convert(item): print(item) print('*'*50) return item.max() df2 = df.groupby(['渠道']).transform(convert) print(df2) '''output 0 1 2 3 4 5 Name: user_id, dtype: int64 ************************************************** 0 100 2 120 4 90 Name: 金额, dtype: int64 ************************************************** user_id 金额 0 1 100 2 3 120 4 5 90 ************************************************** 1 2 3 4 5 6 Name: user_id, dtype: int64 ************************************************** 1 150 3 180 5 200 Name: 金额, dtype: int64 ************************************************** user_id 金额 0 5 120 1 6 200 2 5 120 3 6 200 4 5 120 5 6 200 '''

399

被折叠的 条评论
为什么被折叠?



