首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group by index列比较它们的面积并将值添加到Python中的新列?

Group by index列比较它们的面积并将值添加到Python中的新列?
EN

Stack Overflow用户
提问于 2018-06-19 17:21:12
回答 1查看 46关注 0票数 0

我有以下几列:

代码语言:javascript
复制
index, area_of_poly, cad_admin

我必须按索引进行分组(这是一个称为索引的普通列),以便获取具有相同值的行。

代码语言:javascript
复制
#all the ones, all the twos, etc

但其中一些(行)是独一无二的。关于那些现在不是唯一的:

到目前为止,我所做的是:我必须向group by查询哪个组的面积最大,并在一个名为cad_admin1的新列中将其受人尊敬的cad_admin值赋给该组中的其他组。唯一值仍将具有与now cad_admin1列中的cad_admin相同的值。

更多信息:

数据集:http://www.mediafire.com/file/x4q5k7xuztq6o3w/p.zip

代码语言:javascript
复制
import pandas as pd
import geopandas as gpd
inte=gpd.read_file('in.shp')


inte['index'].value_counts()[inte['index'].value_counts()>1]


359    9
391    8
376    7
374    6
354    5
446    4
403    4
348    4
422    4
424    4
451    4
364    3
315    3
100    3
245    3




inte["rank_gr"] = inte.groupby("index")["area_of_poly"].rank(ascending = False, method = 
"first")
inte["key1_temp"] = inte.apply(lambda row: str(row[""]) if row["rank_gr"] == 1.0
else "", axis = 1)
inte["CAD_ADMIN_FINAL"] = inte.groupby("index")["key1_temp"].transform("sum")
print (inte[["area_of_poly", "index", "CAD_ADMIN", "CAD_ADMIN_FINAL"]])

正如您将看到的,此代码会产生一些错误,如:

代码语言:javascript
复制
TypeError: 'str' object cannot be interpreted as an integer

在处理上述异常的过程中,发生了另一个异常:

代码语言:javascript
复制
KeyError: ('', 'occurred at index 0')

下面是一个有效的输出和输入示例:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({"index": [1,2,3,5,1,2,3,3,3], "area": 
[50,60,70,80,90,100,10,20,70], "key0": ["1f",2,"3d",4,5,6,7,8,9]})
print df

# INPUT
area  index key0
  50      1   1f
  60      2    2
  70      3   3d
  80      5    4
  90      1    5
 100      2    6
  10      3    7
  20      3    8
  70      3    9

df["rank_gr"] = df.groupby("index")["area"].rank(ascending = False, method = 
"first")
df["key1_temp"] = df.apply(lambda row: str(row["key0"]) if row["rank_gr"] == 1.0 
else "", axis = 1)
df["key1"] = df.groupby("index")["key1_temp"].transform("sum")
print df[["area", "index", "key0", "key1"]]


# OUTPUT
area  index key0 key1
  50      1   1f    5
  60      2    2    6
  70      3   3d   3d
  80      5    4    4
  90      1    5    5
 100      2    6    6
  10      3    7   3d
  20      3    8   3d
  70      3    9   3d

感谢在解决这个问题上所做的任何努力,因为我正在尝试解决它2天。

EN

回答 1

Stack Overflow用户

发布于 2018-06-19 18:00:36

代码语言:javascript
复制
inte["key1_temp"] = inte.apply(lambda row: str(row[""]) if 
row["rank_gr"] == 1.0
else "", axis = 1)

在此代码字符串(row“”)中提到您想要操作列

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50924788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档