给Pandas数据框增加计算列和计算行

实际应用中通常需要基于数据框已有列,计算产生新的数据列。本文通过基于计算三列的结果增加列示例进行讲解。

数据框apply函数

df['all_matching'] = df.apply(lambda x: x.col1 == x.col2 == x.col3, axis = 1)

上述代码创建新all_matching 列,它的值为布尔类型,当三列相等为True,否则为False。

增加计算列示例

首先定义示例数据:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'A': [4, 0, 3, 3, 6, 8, 7, 9, 12],
                   'B': [4, 2, 3, 5, 6, 4, 7, 7, 12],
                   'C': [4, 0, 3, 5, 5, 10, 7, 9, 12]})

#view DataFrame
print(df)

#     A   B   C
# 0   4   4   4
# 1   0   2   0
# 2   3   3   3
# 3   3   5   5
# 4   6   6   5
# 5   8   4  10
# 6   7   7   7
# 7   9   7   9
# 8  12  12  12

下面基于A,B,C三列创建新的列all_matching :

#create new column that displays whether or not all column values match
df['all_matching'] = df.apply(lambda x: x.A == x.B == x.C, axis = 1)

#view updated DataFrame
print(df)

#     A   B   C  all_matching
# 0   4   4   4          True
# 1   0   2   0         False
# 2   3   3   3          True
# 3   3   5   5         False
# 4   6   6   5         False
# 5   8   4  10         False
# 6   7   7   7          True
# 7   9   7   9         False
# 8  12  12  12          True

计算行均值和汇总

既然apply参数为lambda表达式,当然可以自定义计算逻辑:

df['sum'] = df.apply(lambda x : x.A+x.B+x.C, axis=1)
df['avg'] = df.apply(lambda x : (x.A+x.B+x.C)/3.0, axis=1)

print(df)

#     A   B   C  sum        avg
# 0   4   4   4   12   4.000000
# 1   0   2   0    2   0.666667
# 2   3   3   3    9   3.000000
# 3   3   5   5   13   4.333333
# 4   6   6   5   17   5.666667
# 5   8   4  10   22   7.333333
# 6   7   7   7   21   7.000000
# 7   9   7   9   25   8.333333
# 8  12  12  12   36  12.000000

按条件计算列

下面示例计算列名称包括Sales的列:

import pandas as pd
df = pd.DataFrame.from_dict({
    'Name': ['Nik', 'Kate', 'Kevin', 'Evan', 'Jane', 'Kyra', 'Melissa'],
    'January_Sales': [90, 95, 75, 93, 60, 85, 75],
    'February_Sales': [95, 95, 75, 65, 50, 85, 100],
    'March_Sales': [100, 95, 50, 75, 90, 50, 80],
    'Some Random Number': [1,2,3,4,5,6,7]
})
print(df.head())

# 过滤出需要计算的列
sales_columns = [col for col in df.columns if 'Sales' in col]
print(sales_columns)
# Returns: ['January_Sales', 'February_Sales', 'March_Sales']

# 增加计算条件
df['Total Sales'] = df[sales_columns].sum(axis=1)
print(df.head())

返回结果:

    Name  January_Sales  February_Sales  March_Sales  TotalSales
0    Nik             90              95          100         285
1   Kate             95              95           95         285
2  Kevin             75              75           50         200
3   Evan             93              65           75         233
4   Jane             60              50           90         200

追加汇总行

有时我们需要增加汇总行,下面示例如何增加汇总行:

# 定义元组列表
salary_of_employees = [('Amit', 2000, 2050, 1099, 2134, 2111),
                    ('Rabi', 2122, 3022, 3456, 3111, 2109),
                    ('Abhi', np.NaN, 2334, 2077, np.NaN, 3122),
                    ('Naresh', 3050, 3050, 2010, 2122, 1111),
                    ('Suman', 2023, 2232, 3050, 2123, 1099),
                    ('Viroj', 2050, 2510, np.NaN, 3012, 2122),
                    ('Nabin', 4000, 2000, 2050, np.NaN, 2111)]

# 通过元组列表创建数据框
test = pd.DataFrame(salary_of_employees,
                  columns=['Name',  'Jan', 'Feb', 'March', 'April', 'May'])

# 设置数据框索引列
test.set_index('Name', inplace=True)

# 计算汇总行作为数据框新的行
total = test.sum()
total.name = 'Total'

# 给数据框追加新行
test = test.append(total.transpose())
print(test)

运行结果:

            Jan      Feb    March    April      May
Name                                               
Amit     2000.0   2050.0   1099.0   2134.0   2111.0
Rabi     2122.0   3022.0   3456.0   3111.0   2109.0
Abhi        NaN   2334.0   2077.0      NaN   3122.0
Naresh   3050.0   3050.0   2010.0   2122.0   1111.0
Suman    2023.0   2232.0   3050.0   2123.0   1099.0
Viroj    2050.0   2510.0      NaN   3012.0   2122.0
Nabin    4000.0   2000.0   2050.0      NaN   2111.0
Total   15245.0  17198.0  13742.0  12502.0  13785.0
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 pandas 可以使用 `mean()` 方法来计算一列的均。例如,如果你有一个名为 `df` 的数据帧,可以使用以下代码计算一列的均: ``` df.mean() ``` 这将返回一个含有每一列的 Series 对象。 ### 回答2: Pandas是一个强大的数据分析工具,它提供了丰富的函数和方法来处理和分析数据。在Pandas计算的均可以通过DataFrame的mean()方法来实现。 使用mean()方法时,可以选择计算整个DataFrame的均,也可以选择计算一列或某几的均。以下是计算的步骤: 1. 导入所需的库和模块: ```python import pandas as pd ``` 2. 创建一个DataFrame对象: ```python data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': [11, 12, 13, 14, 15]} df = pd.DataFrame(data) ``` 3. 使用mean()方法计算: ```python mean_values = df.mean() ``` 4. 输出每: ```python print(mean_values) ``` 以上代码将计算DataFrame对象df的每,并将结果存储在mean_values变量。最后,使用print()函数将每输出到控制台。 该方法也可以用于计算某几的均,只需指定需要计算名即可。例如,要计算df的col1和col3的均,可以使用以下代码: ```python mean_values = df[['col1', 'col3']].mean() ``` 希望以上回答能对你有帮助! ### 回答3: 要计算 pandas 的均,可以使用 `mean()` 函数。该函数会返回每的平均。 以下是一个示例代码: ```python import pandas as pd # 创建一个示例数据 data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]} df = pd.DataFrame(data) # 使用 mean() 函数计算的均 column_mean = df.mean() print(column_mean) ``` 输出结果将会是每的均: ``` A 2.0 B 5.0 C 8.0 dtype: float64 ``` 这样就可以很方便地计算 pandas 的均了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值