我有以下几列:
index, area_of_poly, cad_admin我必须按索引进行分组(这是一个称为索引的普通列),以便获取具有相同值的行。
#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
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"]])正如您将看到的,此代码会产生一些错误,如:
TypeError: 'str' object cannot be interpreted as an integer在处理上述异常的过程中,发生了另一个异常:
KeyError: ('', 'occurred at index 0')下面是一个有效的输出和输入示例:
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天。
发布于 2018-06-19 18:00:36
inte["key1_temp"] = inte.apply(lambda row: str(row[""]) if
row["rank_gr"] == 1.0
else "", axis = 1)在此代码字符串(row“”)中提到您想要操作列
https://stackoverflow.com/questions/50924788
复制相似问题