Python Panda根据多个列计数出现次数

  • 本文关键字:Panda Python python pandas
  • 更新时间 :
  • 英文 :


我已经将我的汽车的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 >= 1ed与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

相关内容

  • 没有找到相关文章

最新更新