Python 如何为每行测试列的值?
我有一个数据框,有10列,大约20000000行。 我需要逐行比较10列的值,并用新值创建5列。为此,我定义了一个由if函数组成的函数,并将其应用于每个函数的测试 例如:Python 如何为每行测试列的值?,python,performance,pandas,Python,Performance,Pandas,我有一个数据框,有10列,大约20000000行。 我需要逐行比较10列的值,并用新值创建5列。为此,我定义了一个由if函数组成的函数,并将其应用于每个函数的测试 例如: >>> import pandas as pd >>> df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[11,12,13,14,16], 'c':[21,22,23,24,25], 'd':[31,32,33,34,35]) >>> d
>>> import pandas as pd
>>> df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[11,12,13,14,16], 'c':[21,22,23,24,25], 'd':[31,32,33,34,35])
>>> def cal1(row):
>>> v1=0
>>> v2=0
>>> if 0< row['a'] <2:
>>> v1=1
>>> if 11< row['b'] <14:
>>> v2=1
>>> return v1+v2
>>> def cal2(row):
>>> v1=0
>>> v2=0
>>> if 2<= row['a'] <4:
>>> v1=-1
>>> if 14<= row['b']<=16:
>>> v2=-1
>>> return v1+v2
>>> df['n1'] = df.apply(ca11, axis=1)
>>> df['n2'] = df.apply(cal2, axis=1)
>>将熊猫作为pd导入
>>>数据帧({'a':[1,2,3,4,5],'b':[11,12,13,14,16],'c':[21,22,23,24,25],'d':[31,32,33,34,35])
>>>def cal1(世界其他地区):
>>>v1=0
>>>v2=0
>>>如果0>v1=1
>>>如果11>v2=1
>>>返回v1+v2
>>>def cal2(世界其他地区):
>>>v1=0
>>>v2=0
>>>如果2>v1=-1
>>>如果14>v2=-1
>>>返回v1+v2
>>>df['n1']=df.apply(ca11,轴=1)
>>>df['n2']=df.apply(计算2,轴=1)
我可以通过这种方式得到答案,但我需要五个定义的函数,每个函数都有一长串的条件,而且计算速度太慢。
(实际数据应在所有10列上进行测试,至少有10个条件。)
有没有比这更好的方法来逐行测试每列中的数据?apply()
接受几个:func
和args
,它们是
除了数组/系列之外,还要传递给函数的位置参数
您可以传入例如(0、2、11、14)
以允许更通用的函数对a列进行评分,(2、4、14、16)
对B列进行评分,等等。或者,传入列名并让函数基于此做出决定
处理2000万行需要相当大的CPU开销和内存占用。您可能会发现,使用a读取要评分的每一行,并使用csvwriter发出结果,然后让pandas导入增强的CSV文件更有效。IIUC,您希望为每一行分配一致的值。例如,
n1
是eit她的0
、1
或2
。如果是这种情况,您可以从0
开始n1
,然后添加索引:
df['n1'] = 0
mask1 = df.a.between(0, 2, inclusive=False)
mask2 = df.b.between(11, 14, inclusive=False)
df.loc[mask1 | mask2, 'n1'] = 1
df.loc[mask1 & mask2, 'n1'] = 2