df.transform函数的使用
目录
- df.transform函数介绍
- transform函数的使用:
- 1.转换数值
- 2.合并分组结果
- 3.过滤数据
- 4.结合分组处理缺失值
df.transform函数介绍
df.transform()是Pandas中的一个函数,用于对DataFrame中的数据进行转换操作。它可以接受一个函数作为参数,并将这个函数应用到DataFrame的每个元素上,然后返回一个新的DataFrame,其中的元素都是经过这个函数转换后的结果。
基本语法如下:
df.transform(func, axis=0, *args, **kwargs)
参数说明:
- func:要应用的函数,可以是一个函数,也可以是一个字符串(表示一个函数名)。
- axis:指定函数应用的方向,0表示沿着列的方向应用函数,1表示沿着行的方向应用函数。
- *args和**kwargs:可选参数,用于传递给func函数的其他参数。
transform函数的使用:
transform有4个比较常用的功能,总结如下:转换数值,合并分组结果,过滤数据,结合分组处理缺失值
1.转换数值
import pandas as pd
import numpy as np
df = pd.DataFrame({
'restaurant_id': [101,102,103,104,105,106,107,108],
'address': ['A','B','C','D', 'E', 'F', 'G','H'],
'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham','London'],
'sales': [10,500,48,12,21,22,14,10]
})
print(df)
def plus_10(x):
return x+10
#df['sales'] =df['sales'].transform(plus_10)
df['sales'] = df['sales'].transform(lambda x: x+10)
print(df)
restaurant_id address city sales
0 101 A London 10
1 102 B London 500
2 103 C London 48
3 104 D Oxford 12
4 105 E Oxford 21
5 106 F Durham 22
6 107 G Durham 14
7 108 H London 10
restaurant_id address city sales
0 101 A London 20
1 102 B London 510
2 103 C London 58
3 104 D Oxford 22
4 105 E Oxford 31
5 106 F Durham 32
6 107 G Durham 24
7 108 H London 20
2.合并分组结果
import pandas as pd
import numpy as np
df = pd.DataFrame({
'restaurant_id': [101,102,103,104,105,106,107,108],
'address': ['A','B','C','D', 'E', 'F', 'G','H'],
'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham','London'],
'sales': [10,500,48,12,21,22,14,10]
})
print(df)
df['city_total_sales'] = df.groupby('city')['sales'].transform('sum')
df['pct'] = df['sales'] / df['city_total_sales']
df['pct'] = df['pct'].apply(lambda x: format(x, '.2%'))
print(df)
restaurant_id address city sales
0 101 A London 10
1 102 B London 500
2 103 C London 48
3 104 D Oxford 12
4 105 E Oxford 21
5 106 F Durham 22
6 107 G Durham 14
7 108 H London 10
restaurant_id address city sales city_total_sales pct
0 101 A London 10 568 1.76%
1 102 B London 500 568 88.03%
2 103 C London 48 568 8.45%
3 104 D Oxford 12 33 36.36%
4 105 E Oxford 21 33 63.64%
5 106 F Durham 22 36 61.11%
6 107 G Durham 14 36 38.89%
7 108 H London 10 568 1.76%
3.过滤数据
import pandas as pd
import numpy as np
df = pd.DataFrame({
'restaurant_id': [101,102,103,104,105,106,107,108],
'address': ['A','B','C','D', 'E', 'F', 'G','H'],
'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham','London'],
'sales': [10,500,48,12,21,22,14,10]
})
print(df)
print(df[df.groupby('city')['sales'].transform('sum') > 40])
restaurant_id address city sales
0 101 A London 10
1 102 B London 500
2 103 C London 48
3 104 D Oxford 12
4 105 E Oxford 21
5 106 F Durham 22
6 107 G Durham 14
7 108 H London 10
restaurant_id address city sales
0 101 A London 10
1 102 B London 500
2 103 C London 48
7 108 H London 10
4.结合分组处理缺失值
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'value': [1, np.nan, np.nan, 2, 8, 2, np.nan, 3]
})
print(df)
df['value'] = df.groupby('name').transform(lambda x: x.fillna(x.mean()))
print(df)
name value
0 A 1.0
1 A NaN
2 B NaN
3 B 2.0
4 B 8.0
5 C 2.0
6 C NaN
7 C 3.0
name value
0 A 1.0
1 A 1.0
2 B 5.0
3 B 2.0
4 B 8.0
5 C 2.0
6 C 2.5
7 C 3.0