我已经将我的汽车的x,y坐标添加到一个熊猫中。我希望能够计算出某个区域有多少辆车。在这种情况下,我想要得到x = 2和y=1到3中所有汽车的数量。我想要得到计数2,因为没有车在位置(2,2)。我还不太习惯使用pandas,所以我想循环所有内容。
def index_used_x_y(x,y):
try:
cars .loc[(cars ['x'] == x) & (cars ['y'] == y)].index
return True
except ValueError:
return False
cars = pd.DataFrame()
cars ['x'] = np.array([1,1,1,2,2,3,3,3,4,4,4])
cars ['y'] = np.array([1,2,3,1,3,1,2,3,1,2,3])
count_cars = 0
print(cars )
x_from = 2
x_to = 2
y_from = 1
y_to = 3
for x in range(x_from,x_to+1):
for y in range(y_from,y_to+1):
if index_used_x_y(x,y):
count_cars +=1
print(count_cars )
我知道您提到您想使用循环,但Pandas的强大之处是避免循环(至少在普通Python中是循环:在(Pandas)的框架下,实现了循环)。
您可以使用以下命令:
import pandas as pd
cars = pd.DataFrame({'x': [1,1,1,2,2,3,3,3,4,4,4],
'y': [1,2,3,1,3,1,2,3,1,2,3]})
count = ( (cars['x'] == 2) & ((cars['y'] >= 1) | (cars['y'] <= 3)) ).sum()
print(count)
这里的逻辑是通过布尔逻辑组合的比较。您需要注意括号,否则事情会变得混乱:y >= 1
或ed与y <= 3
,然后结果是和ed与x == 2
。
中间级数在求和之前为:
0 False
1 False
2 False
3 True
4 True
5 False
6 False
7 False
8 False
9 False
10 False
dtype: bool
和.sum()
方法将True
解释为1,False
解释为0,结果为2。
您可以使用series.between
:
(cars['x'].between(x_from,x_to) & cars['y'].between(y_from,y_to)).sum()
2