Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)

  • Post category:Python

下面是关于Pandas对DataFrame单列/多列进行运算的攻略:

DataFrame单列运算

  1. map(): 对DataFrame中的某一列进行逐元素操作,返回映射后的结果。该方法可以接收一个字典、Series、函数等类型作为映射方式,其中字典和Series的索引为原DataFrame的列名,字典或Series的值为进行操作后的结果。

示例一:定义一个DataFrame,对其中一列成绩进行映射,将数值转换为字母成绩。

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Mary'], 'Score':[65, 90, 78]}
df = pd.DataFrame(data)
grade_map = {100: 'A+', 90: 'A', 80: 'B', 70: 'C', 60: 'D', 0: 'F'}
df['Grade'] = df['Score'].map(lambda x: next((v for k, v in grade_map.items() if x >= k), 'F'))
print(df)

运行结果:

   Name  Score Grade
0   Tom     65     D
1  Jack     90     A
2  Mary     78     C

示例二:定义一个DataFrame,将其中一列数值四舍五入保留两位小数。

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Mary'], 'Height':[1.75, 1.80, 1.67]}
df = pd.DataFrame(data)
df['Height'] = df['Height'].map(lambda x: round(x, 2))
print(df)

运行结果:

   Name  Height
0   Tom    1.75
1  Jack    1.80
2  Mary    1.67
  1. apply(): 对DataFrame中的某一列逐行进行操作,返回处理后的Series。该方法需要传入一个函数作为操作方式。

示例三:定义一个DataFrame,对其中一列字符串转换为大写格式。

import pandas as pd

data = {'Name':['tom', 'Jack', 'Mary'], 'Age':[25, 30, 28]}
df = pd.DataFrame(data)
df['Name'] = df['Name'].apply(lambda x: x.upper())
print(df)

运行结果:

   Name  Age
0   TOM   25
1  JACK   30
2  MARY   28

DataFrame多列运算

  1. apply()lambda函数:

apply()方法在传入的操作函数中会以列为单位进行操作,所以该操作函数中其实是序列操作,而不是单纯的整体列运算。

示例四:定义一个DataFrame,对其中两列元素求和。

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Mary'], 'Score':[65, 90, 78], 'Age':[25, 30, 28]}
df = pd.DataFrame(data)
df['Score-Age'] = df.apply(lambda x: x['Score'] + x['Age'], axis=1)
print(df)

运行结果:

   Name  Score  Age  Score-Age
0   Tom     65   25         90
1  Jack     90   30        120
2  Mary     78   28        106
  1. agg(): 对DataFrame进行列统计分析,可以一次性对多个列进行运算,并返回结果。该方法可以接收多个操作函数,其中每个操作函数应当为单个列元素进行操作。

示例五:定义一个DataFrame,对其中两列元素进行最大值、最小值和平均值的统计。

import pandas as pd

data = {'Name':['Tom', 'Jack', 'Mary'], 'Score':[65, 90, 78], 'Age':[25, 30, 28]}
df = pd.DataFrame(data)
res = df[['Score', 'Age']].agg(['max', 'min', 'mean'])
print(res)

运行结果:

       Score        Age
max     90.0      30.0
min     65.0      25.0
mean    77.6      27.7