我想计算两个点之间的距离并标记它们。问题是代码不能在超过1行的代码上工作。当有1行时,程序会显示我想要的结果:
当有超过1行时,这是一个错误:"cannot convert the series to“
这是我的代码:
data = pd.read_csv (r'C:\Users\DSAij\Documents\Projekt.csv')
data.head()
choices_1 = ['short','medium','long']
if not ((data['x_start'] < data['x_end']) & (data['y_start'] < data['y_end'])).empty:
conditions_1 = [
((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_end'])-(data['y_start']))**2)) < 5),
((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_end'])-(data['y_start']))**2)) >= 5 and
(math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_end'])-(data['y_start']))**2)) < 10),
((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_end'])-(data['y_start']))**2)) > 10)]
data['Pass'] = np.select(conditions_1, choices_1)
# if not ((data['x_start'] < data['x_end']) & (data['y_start'] > data['y_end'])).empty:
# conditions_2 = [
# ((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_start'])-(data['y_end']))**2)) < 5),
# ((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_start'])-(data['y_end']))**2)) >= 5 and
# (math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_start'])-(data['y_end']))**2)) < 10),
# ((math.sqrt((((data['x_end']) - (data['x_start']))**2) + ((data['y_start'])-(data['y_end']))**2)) > 10)]
# data['Pass'] = np.select(conditions_2, choices_1)
# if not ((data['x_start'] > data['x_end']) & (data['y_start'] < data['y_end'])).empty:
# conditions_3 = [
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_end'])-(data['y_start']))**2)) < 5),
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_end'])-(data['y_start']))**2)) >= 5 and
# (math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_end'])-(data['y_start']))**2)) < 10),
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_end'])-(data['y_start']))**2)) > 10)]
# data['Pass'] = np.select(conditions_3, choices_1)
# if not ((data['x_start'] > data['x_end']) & (data['y_start'] > data['y_end'])).empty:
# conditions_4 = [
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_start'])-(data['y_end']))**2)) < 5),
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_start'])-(data['y_end']))**2)) >= 5 and
# (math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_start'])-(data['y_end']))**2)) < 10),
# ((math.sqrt((((data['x_start']) - (data['x_end']))**2) + ((data['y_start'])-(data['y_end']))**2)) > 10)]
#data['Pass'] = np.select(conditions_4, choices_1)
被注释掉的部分是当x
_
end大于x
_
启动等。
这是我的数据框
发布于 2021-03-02 06:47:10
试试这个
import pandas as pd
import numpy as np
#create a function that calculates what you want (i.e distance in this case)
def dist(x0, x1, y0, y1):
return ((x1 - x0)**2 + (y1 - y0)**2)**(1/2)
# Your dataframe (please provide this yourself next time)
df = pd.DataFrame({'x_start':[24, 24, 24, 5],
'x_end':[12, 36, 12, 12],
'y_start':[35, 35, 95, 87],
'y_end':[57, 57, 57, 57]})
#this calculates the distance
df['Pass'] = df.apply(lambda x:
dist(x['x_start'], x['x_end'], x['y_start'], x['y_end']), axis=1)
#this will apply your conditions
df['Pass'] = np.select(
[df['Pass']<5, (df['Pass']<10) & (df['Pass']>=5), df['Pass']>=10],
['short','medium','long'],
default=np.nan)
df
https://stackoverflow.com/questions/66430530
复制相似问题