我有一个数据帧df['y0', 'size]
,其中有两列。在
y0的浮点值从25.0到800.0
size是一个浮点数据类型,其值从8到25。在
import pandas as pd
data = '''\
y0 Size
25 8
37 8.7
68.5 9.3
93.4 11.4
110.7 14.6
145.6 12.1
180.3 10.9'''
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
等等。。。在
期望输出
创建一个新列[y0Dash],其逻辑如下:
我得到了一个错误,我试图比较一个标量值和一个序列,我理解-我试图与minuy0_DIFF进行比较
但是,我不知道如何在lambda函数中实现这一点。如何比较两个连续的行以得到我想要的结果?在
我尝试了什么
def columnCompare():
if ((df['y0'] - df[['y0'].shift(-1)]) /
((df['Size'] + df[['Size'].shift(-1)]) / 2) < MIN_Y0_DIFF) ):
df['y0Dash'] = df['y0']
else:
df['y0Dash'] = df['y0'].shift(-1)
df = df.apply(lambda x: columnCompare)
您不应该为此使用
lambda
函数。如果我正确理解您的逻辑,您可以计算一个布尔掩码,并以矢量化的方式应用您的逻辑。在似乎主要的问题是如何实现
pd.Series.shift
:df[['Size'].shift(-1)]
不正确,因为list
没有shift
方法。在结果:
^{pr2}$相关问题 更多 >
编程相关推荐