通过使用熊猫创建新列,将查询简化为“哪里”?

时间:2018-11-01 15:31:13

标签: python pandas

我有一列,其中有对一列的SQL查询。这些是在名为Select_analysis

的函数上实现的

表格:

Select_analysis (input_shapefile, output_name, {where_clause}) # it takes until where.

示例:

SELECT * from OT         # OT is a dataset
GROUP BY OT.CA  # CA is a number that may exist many times.Therefore we group by that field.
HAVING ((Count(OT.OBJECTID))>1) # an id that appears more than once.

OT数据集

objectid     CA
1            125
2            342
3            263
1            125

我们按CA分组。

关于具有:它应用于对象ID超过一​​次的行。在此示例中,对象ID是1。

我的想法是制作另一列存储结果的列,该结果将通过select_analysis函数中的简单where子句进行访问

示例:OT数据集

objectid     CA       count_of_objectid_aftergroupby
1            125           2
2            342           1
3            263           1
1            125           2

那么可以这样:

Select_analysis(roads.shp,output.shp, count_of_objectid_aftergroupby > '1')

注释

必须采用某种方式,以便最终使用select analysis函数。

1 个答案:

答案 0 :(得分:1)

假设您已将数据标记为熊猫,因此将其拉入熊猫,这是一种可能的解决方案:

df=pd.DataFrame({'objectID':[1,2,3,1],'CA':[125,342,463,125]}).set_index('objectID')


objectID    CA
1           125
2           342
3           463
1           125

df['count_of_objectid_aftergroupby']=[df['CA'].value_counts().loc[x] for x in df['CA']]

objectID    CA  count_of_objectid_aftergroupby  
1           125                              2
2           342                              1
3           463                              1
1           125                              2

list comp基本上是这样做的: 拉出df ['CA']中每个项目的值计数为一个序列。 使用loc在“ CA”的每个值处索引到序列中以查找该值的计数 将该项目放入列表 将该列表添加为新列