Pandas之DataFrame 之 666的招数:多列操作生成新列 eval

本文介绍了Pandas库中DataFrame.eval()方法的高效使用技巧,通过实例演示了如何利用此方法进行复杂的列运算,包括创建新列并进行特定列的数学运算。同时,文章提供了从现有列动态生成表达式的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DataFrame.eval()

今天发现了pandas一个666的技巧 DataFrame.eval(),必须写下来:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((6,4)), columns=list('abcd'))
df
	a	       b	        c	        d
0	0.352100	0.660768	0.259112	0.190435
1	0.438345	0.147769	0.702476	0.503706
2	0.214064	0.440153	0.700988	0.029637
3	0.646761	0.539095	0.980113	0.921489
4	0.747330	0.260352	0.191178	0.002823
5	0.969599	0.163768	0.018234	0.458367

我想做的是增加一列新列df['e'] = df['a']*df['b']+df['c']*df['d'];
eval实现如下:

df.eval('e=a*c+b*d', inplace=True)
print(df)

[Out]:
	a	        b        	c	        d      	    e
0	0.352100	0.660768	0.259112	0.190435	0.217067
1	0.438345	0.147769	0.702476	0.503706	0.382359
2	0.214064	0.440153	0.700988	0.029637	0.163101
3	0.646761	0.539095	0.980113	0.921489	1.130668
4	0.747330	0.260352	0.191178	0.002823	0.143608
5	0.969599	0.163768	0.018234	0.458367	0.092746

666666666666666666666666666 !

对于我想处理的问题是从df.columns中搜索出特定列colA=['a', 'b'], colB=['c', 'd']做上述操作,利用python的字符串处理技巧,操作如下:

evalStr = zip(colA,'*'*len(colA), colB)
evalStrList = [''.join(x) for x in evalStr]

print(evalStrList) # 输出 ['a*c', 'b*d']

eval_expression = '+'.join(evalStrList)  #其实就是 'a*c+b*d'
df.eval('e=' + eval_expression, inplace = True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值