将包含不同长度道路子部分属性的行与固定子部分长度的集合进行比较?

时间:2017-07-18 10:34:33

标签: python pandas dataframe

我有以下数据框列出道路的部分(由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的部分列表。我可以弄清楚如何总结设置的起点和终点之间的长度,但我不知道如何开始使用字符串属性。我可以用熊猫做这个吗?

1 个答案:

答案 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