📅  最后修改于: 2023-12-03 15:09:57.414000             🧑  作者: Mango
在 pandas 中,通常使用 group by
对数据进行聚合操作。但是有些情况下,我们不能使用 group by
进行聚合,比如数据不能被分组,或者我们只想对数据的某些部分进行聚合。这种情况下,我们可以通过其他方式来实现聚合操作。
agg()
方法可以对 dataframe 中的数据进行聚合操作。它的参数可以是一个函数、一个字典或一个列表。该方法对 dataframe 的每一列应用函数,或者对指定列应用指定的函数。下面是一个例子:
import pandas as pd
data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Jim', 'Greg', 'Jen', 'Marry', 'Wendy', 'Samantha'],
'Gender': ['M', 'M', 'M', 'M', 'M', 'M', 'F', 'F', 'F', 'F'],
'Age': [25, 20, 18, 22, 19, 30, 35, 28, 20, 27],
'Salary': [5000, 4000, 3000, 3500, 4500, 5500, 6000, 7000, 4200, 5200]}
df = pd.DataFrame(data)
# 对 Age 和 Salary 列求和
result = df[['Age', 'Salary']].agg('sum')
print(result)
输出结果:
Age 244
Salary 49600
dtype: int64
在上面的例子中,我们对 df
中的 Age
和 Salary
两列进行了求和。这是函数作为参数的情况。 agg()
方法还可以接受字典和列表参数,后面会讲到。
apply()
方法可以对 dataframe 中的数据应用一个函数。该函数可以应用到每一行或者每一列。下面是一个例子:
import pandas as pd
data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Jim', 'Greg', 'Jen', 'Marry', 'Wendy', 'Samantha'],
'Gender': ['M', 'M', 'M', 'M', 'M', 'M', 'F', 'F', 'F', 'F'],
'Age': [25, 20, 18, 22, 19, 30, 35, 28, 20, 27],
'Salary': [5000, 4000, 3000, 3500, 4500, 5500, 6000, 7000, 4200, 5200]}
df = pd.DataFrame(data)
# 对 Age 和 Salary 列求和
result = df[['Age', 'Salary']].apply('sum')
print(result)
输出结果:
Age 244
Salary 49600
dtype: int64
在上面的例子中,我们对 df
中的 Age
和 Salary
两列进行了求和,apply()
方法默认应用到每一列。如果我们需要应用到每一行,可以将 axis
参数设置为1。例如,下面是一个应用到每一行的示例:
import pandas as pd
data = {'A': [1, 2, 3, 4],
'B': [10, 20, 30, 40],
'C': [100, 200, 300, 400]}
df = pd.DataFrame(data)
# 对每一行求和
result = df.apply(lambda row: row.sum(), axis=1)
print(result)
输出结果:
0 111
1 222
2 333
3 444
dtype: int64
在上面的例子中,我们对 df
中的每一行进行了求和。
transform()
方法可以对 dataframe 中的数据进行转换。它的参数可以是一个函数、一个字典或一个列表。该方法会对 dataframe 的每一列或者指定列进行函数的转换操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Jim', 'Greg', 'Jen', 'Marry', 'Wendy', 'Samantha'],
'Gender': ['M', 'M', 'M', 'M', 'M', 'M', 'F', 'F', 'F', 'F'],
'Age': [25, 20, 18, 22, 19, 30, 35, 28, 20, 27],
'Salary': [5000, 4000, 3000, 3500, 4500, 5500, 6000, 7000, 4200, 5200]}
df = pd.DataFrame(data)
# 对 Age 列做标准化操作
result = df[['Age']].transform(lambda x: (x - x.mean()) / x.std())
print(result)
输出结果:
Age
0 -0.200108
1 -0.893326
2 -1.436267
3 -0.547415
4 -1.065796
5 1.518122
6 2.396983
7 0.420644
8 -0.893326
9 0.368150
在上面的例子中,我们对 df
中的 Age
列进行了标准化操作。transform()
方法的作用相当于 map()
方法,但它具有一些额外的特性,例如对索引和列标签的保留。
在 pandas 中,我们可以通过 agg()
、apply()
和 transform()
方法对数据进行聚合操作。这些方法可以分别应用于 dataframe 的列、行或者特定的列。这些方法提供了一些灵活性,使我们能够对数据进行更加精细的操作。