python-DataFrame根据已有列计算其他列


读取数据源

import pandas as pd
# 读取数据
path1 = r'../excelFile-j/flower.csv'
df_data = pd.read_csv(path1)
# df_data 内容

在这里插入图片描述

1、根据已有列新增列

方式一:根据单列

df_data["LengthAdd"] = df_data["Sepal.Length"] + 2

方式二:根据多列

df_data["L*W"] = df_data["Sepal.Length"] * df_data["Sepal.Width"]

方式三:利用apply函数(单列)

def sqrt_test(a):
    s = a * a + 1
    return s

df_data['W*W+1'] = df_data['Sepal.Width'].apply(lambda x : sqrt_test(x))

在这里插入图片描述

方法四:利用apply函数(多列)

数据如下图所示,目的是要统计:
red_number的号码也在red_ticket_number中的有几个;blue_number的号码也在blue_ticket_number中的有几个。新增列red_appear_counts和blue_appear_counts来记录。
在这里插入图片描述
思路:先把这四列的字符串,利用split转换成列表,然后利用列表中的 in 操作符来判断。遍历red_number,如果在red_ticket_number就加1,最后返回结果(blue类似)。
重点:要按行应用,使用apply时涉及两个变量。

# 求列表col1的元素有几个也在列表col2中
def appear_counts(col1, col2):
    choose_list = col1.split(' ')
    search_list = col2.split(' ')
    num = 0 # 用来记出现的次数
    for ch in choose_list:
        if ch in search_list:
            num+=1
    return num

# 实现传入两列(两个变量)
def appear_counts_red(df):
    x = df['red_number']
    y = df['red_ticket_number']
    return appear_counts(x, y)

def appear_counts_blue(df):
    x = df['blue_number']
    y = df['blue_ticket_number']
    return appear_counts(x, y)

# 分别计算红蓝球出现在购买号码里的次数
# 使用apply(),按行应用
data['red_appear_counts'] = data.apply(appear_counts_red, axis=1)
data['blue_appear_counts'] = data.apply(appear_counts_blue, axis=1)

结果:
在这里插入图片描述

2、根据已有列修改其他列

目的:将Species列等于’setosa’并且 L*W列大于10的,修改 L*W>10列的值为’yes’。
1)先看下筛选行的方法:

# 单条件筛选
df_data[df_data['Species']=='setosa']
# 多条件筛选
df_data[(df_data['Species']=='setosa') & (df_data['L*W']>10)]

2)基于上面的知识,实现,将Species列等于’setosa’并且 L*W列大于10的,修改 L*W>10列的值:

# 先新增一个名为 L*W>10的列,初始值为空字符串
df_data['L*W>10']=''
# (单条件)Species列等于'setosa',修改 L*W>10列 为'yes'
df_data.loc[df_data['Species']=='setosa','L*W>10'] = 'yes'
# (多个条件)筛选Species列等于'setosa'并且 L*W列大于17的,修改其对应的 L*W>10列的值
# 没有完全按照最初的条件写,这里就随便举个例子,示意一下
df_data.loc[(df_data['Species']=='setosa') & (df_data['L*W']>17),'L*W>10'] = '>17'
# df_data结果

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值