-
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
'''