Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在int和series之差的数据帧计数幂上应用函数_Python_Pandas_Dataframe_Lambda - Fatal编程技术网

Python 在int和series之差的数据帧计数幂上应用函数

Python 在int和series之差的数据帧计数幂上应用函数,python,pandas,dataframe,lambda,Python,Pandas,Dataframe,Lambda,我正在尝试使用apply函数向dataframe添加一个新列。我需要计算第0行和所有其他行中X和Y坐标之间的距离,我创建了以下逻辑: import pandas as pd import numpy as np data = {'X':[0,0,0,1,1,5,6,7,8],'Y':[0,1,4,2,6,5,6,4,8],'Value':[6,7,4,5,6,5,6,4,8]} df = pd.DataFrame(data) def countDistance(lat1, lon1, lat2

我正在尝试使用apply函数向dataframe添加一个新列。我需要计算第0行和所有其他行中X和Y坐标之间的距离,我创建了以下逻辑:

import pandas as pd
import numpy as np
data = {'X':[0,0,0,1,1,5,6,7,8],'Y':[0,1,4,2,6,5,6,4,8],'Value':[6,7,4,5,6,5,6,4,8]}
df = pd.DataFrame(data)

def countDistance(lat1, lon1, lat2, lon2):
        print(lat1, lon1, lat2, lon2)
        #use basic knowledge about triangles - values are in meters
        distance = np.sqrt(np.power(lat1-lat2,2)+np.power(lon1-lon2,2))
        return distance

def recModif(df):
        x = df.loc[0,'X']
        y = df.loc[0,'Y']
        df['dist'] = df.apply(lambda n: countDistance(x,y,df['X'],df['Y']), axis=1)
        #more code will come here

recModif(df)
但这总是返回错误:
ValueError:传递的项目数错误9,位置意味着


我认为,由于x和y是标量,所以使用
np.repeat
可能会有帮助,但没有,错误仍然是一样的。我看到了类似的帖子,例如,但是使用简单的乘法,如何实现我所需要的减法?

.apply()
中的变量名被弄乱了,并且与外部范围冲突。避免这种情况,代码就会起作用

df['dist'] = df.apply(lambda row: countDistance(x,y,row['X'],row['Y']), axis=1)

df
   X  Y  Value       dist
0  0  0      6   0.000000
1  0  1      7   1.000000
2  0  4      4   4.000000
3  1  2      5   2.236068
4  1  6      6   6.082763
5  5  5      5   7.071068
6  6  6      6   8.485281
7  7  4      4   8.062258
8  8  8      8  11.313708
还要注意,np.power()和np.sqrt()已经矢量化,因此.apply本身对于给定的数据集是多余的:

countDistance(x,y,df['X'],df['Y'])

Out[154]: 
0     0.000000
1     1.000000
2     4.000000
3     2.236068
4     6.082763
5     7.071068
6     8.485281
7     8.062258
8    11.313708
dtype: float64

.apply()
中的变量名出错,并与外部作用域冲突。避免这种情况,代码就会起作用

df['dist'] = df.apply(lambda row: countDistance(x,y,row['X'],row['Y']), axis=1)

df
   X  Y  Value       dist
0  0  0      6   0.000000
1  0  1      7   1.000000
2  0  4      4   4.000000
3  1  2      5   2.236068
4  1  6      6   6.082763
5  5  5      5   7.071068
6  6  6      6   8.485281
7  7  4      4   8.062258
8  8  8      8  11.313708
还要注意,np.power()和np.sqrt()已经矢量化,因此.apply本身对于给定的数据集是多余的:

countDistance(x,y,df['X'],df['Y'])

Out[154]: 
0     0.000000
1     1.000000
2     4.000000
3     2.236068
4     6.082763
5     7.071068
6     8.485281
7     8.062258
8    11.313708
dtype: float64
解决方案 试试这个:

##方法1
df['dist']=((df.X-df.X[0])**2+(df.Y-df.Y[0])**2)**0.5
##方法2:。应用()
x、 y=df.x[0],df.y[0]
df['dist']=df.apply(λ行:((行X-X)**2+(行Y-Y)**2)**0.5,轴=1)
输出

#打印(df.to_标记(index=False))
|X | Y |值|距离|
|----:|----:|--------:|---------:|
|   0 |   0 |       6 |  0       |
|   0 |   1 |       7 |  1       |
|   0 |   4 |       4 |  4       |
|   1 |   2 |       5 |  2.23607 |
|   1 |   6 |       6 |  6.08276 |
|   5 |   5 |       5 |  7.07107 |
|   6 |   6 |       6 |  8.48528 |
|   7 |   4 |       4 |  8.06226 |
|   8 |   8 |       8 | 11.3137  |
虚拟数据
将熊猫作为pd导入
数据={
“X”:[0,0,0,1,1,5,6,7,8],
“Y”:[0,1,4,2,6,5,6,4,8],
“值”:[6,7,4,5,6,5,6,4,8]
}
df=pd.DataFrame(数据)
解决方案 试试这个:

##方法1
df['dist']=((df.X-df.X[0])**2+(df.Y-df.Y[0])**2)**0.5
##方法2:。应用()
x、 y=df.x[0],df.y[0]
df['dist']=df.apply(λ行:((行X-X)**2+(行Y-Y)**2)**0.5,轴=1)
输出

#打印(df.to_标记(index=False))
|X | Y |值|距离|
|----:|----:|--------:|---------:|
|   0 |   0 |       6 |  0       |
|   0 |   1 |       7 |  1       |
|   0 |   4 |       4 |  4       |
|   1 |   2 |       5 |  2.23607 |
|   1 |   6 |       6 |  6.08276 |
|   5 |   5 |       5 |  7.07107 |
|   6 |   6 |       6 |  8.48528 |
|   7 |   4 |       4 |  8.06226 |
|   8 |   8 |       8 | 11.3137  |
虚拟数据
将熊猫作为pd导入
数据={
“X”:[0,0,0,1,1,5,6,7,8],
“Y”:[0,1,4,2,6,5,6,4,8],
“值”:[6,7,4,5,6,5,6,4,8]
}
df=pd.DataFrame(数据)

为了实现您的最终目标,我建议将函数recModif更改为:

def recModif(df):
    x = df.loc[0,'X']
    y = df.loc[0,'Y']
    df['dist'] = countDistance(x,y,df['X'],df['Y'])
    #more code will come here
这个输出

X   Y   Value   dist
0   0   0   6   0.000000
1   0   1   7   1.000000
2   0   4   4   4.000000
3   1   2   5   2.236068
4   1   6   6   6.082763
5   5   5   5   7.071068
6   6   6   6   8.485281
7   7   4   4   8.062258
8   8   8   8   11.313708

为了实现您的最终目标,我建议将函数recModif更改为:

def recModif(df):
    x = df.loc[0,'X']
    y = df.loc[0,'Y']
    df['dist'] = countDistance(x,y,df['X'],df['Y'])
    #more code will come here
这个输出

X   Y   Value   dist
0   0   0   6   0.000000
1   0   1   7   1.000000
2   0   4   4   4.000000
3   1   2   5   2.236068
4   1   6   6   6.082763
5   5   5   5   7.071068
6   6   6   6   8.485281
7   7   4   4   8.062258
8   8   8   8   11.313708

@鲁丽,请看看这个。如果你有任何问题,请告诉我。这不算我需要的,你可以省略减法here@Ruli更新了解决方案。请现在检查。@Ruli请看一下这个。如果你有任何问题,请告诉我。这不算我需要的,你可以省略减法here@Ruli更新了解决方案。请现在检查。