我有以下数据框列出道路的部分(由km格式的起点和终点定义),其中包含不同子部分的attrivutes。长度只是来自起点 - 终点。
Start End Attrib Length
0 0.03 K 0.03
0.03 0.036 K 0.006
0.036 0.082 K 0.046
0.082 0.091 H 0.009
0.091 0.096 H 0.005
0.096 0.1 K 0.004
0.1 0.121 K 0.021
0.121 0.123 K 0.002
...
...
我需要找到并可能为
创建新的数据框a)每个0.1km部分最常见的属性和
b)其占总长0.1km的百分比。
到目前为止我所拥有的是以元组形式出现的0.1km的部分列表。我可以弄清楚如何总结设置的起点和终点之间的长度,但我不知道如何开始使用字符串属性。我可以用熊猫做这个吗?
答案 0 :(得分:0)
首先,创建一个列,用于指示每个0.1km的部分:
df['label'] = df['Start'].apply(lambda x: int(x/0.1))
print(df)
Start End Arrtib Length label
0 0.000 0.030 K 0.030 0
1 0.030 0.036 K 0.006 0
2 0.036 0.082 K 0.046 0
3 0.082 0.091 H 0.009 0
4 0.091 0.096 H 0.005 0
5 0.096 0.100 K 0.004 0
6 0.100 0.121 K 0.021 1
7 0.121 0.123 K 0.002 1
然后获取每个0.1km部分的属性唯一值:
unique = df.groupby('label').agg({'Arrtib': lambda x: np.unique(x,return_counts=True)})
print(unique)
Arrtib
label
0 ([H, K], [2, 4])
1 ([K], [2])
最后获得最常见的属性和0.1km总分数的百分比:
unique['mostcommon'] = unique['Arrtib'].map(lambda x:x[0][-1])
unique['percentage '] = unique['Arrtib'].map(lambda x:x[1][-1]/x[1].sum())
print(unique)
Arrtib mostcommon percentage
label
0 ([H, K], [2, 4]) K 0.666667
1 ([K], [2]) K 1.000000