python-3.x 如何将数据从Dataframe行连接到单个行

v09wglhw  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(188)

这应该很容易(我可以在Excel中快速完成)。我有下面的数据框架,我想加入,连接,聚合XY对到一个字符串(然后在开始和结束添加文本)。

Easting     Northing
0   416213.873  6507344.904
1   424283.1    6509982.331
2   428632.58   6496675.102
3   418176.907  6493257.665
4   415338.984  6501940.281
5   416213.873  6507344.904

我用这条线连接每个XY对。

df['WKT'] = df[['Easting', 'Northing']].agg(' '.join, axis=1)

    Easting     Northing    WKT
0   416213.873  6507344.904 416213.873 6507344.904
1   424283.1    6509982.331 424283.1 6509982.331
2   428632.58   6496675.102 428632.58 6496675.102
3   418176.907  6493257.665 418176.907 6493257.665
4   415338.984  6501940.281 415338.984 6501940.281
5   416213.873  6507344.904 416213.873 6507344.904

我尝试了.join和.agg,但没有得到我想要的。我也看了Pivot,但也不能让它工作。
我想做的是到达这里,所有的东/北对都连接起来形成一个字符串,它们之间有','-然后在前面添加“POLYGON((“和“))”。
多边形((X 0 Y 0,X1 Y1,X2 Y2,X3 Y3,X4 Y 4,X5 Y 5))
在这种情况下有5个点,第6个是第1个的重复以关闭框。它并不总是一个固定的点数,所以我研究了可迭代的循环,但是由于基本的连接不起作用,循环也产生了垃圾。
问题的次要部分涉及LineString。输入文件将像这样,但我只导入SOLE,SOLE,EOLE,EOLN:

Line #,Name,SOLE,SOLN,EOLE,EOLN,SOLKP,EOLKP
1,EQ23303-01001-04,421386.910,6499570.855,420145.852,6503366.914,0.000,3.994
2,EQ23303-01005-08,421410.672,6499578.623,420169.615,6503374.683,0.000,3.994
3,EQ23303-01009-12,421434.435,6499586.392,420193.377,6503382.451,0.000,3.994
4,EQ23303-01013-16,421458.197,6499594.161,420217.139,6503390.220,0.000,3.994

对于每一行,我试图得到的输出是:

LINESTRING(SOLE SOLN,EOLE EOLN)

简单地说,它只是X和Y之间有一个空格,XY对之间有一个空格的行的连接。我有另一种方法,但看到形状的功能,我想知道是否有一个更整洁的方法。

nwwlzxa7

nwwlzxa71#

IIUC,您可以从shapely使用Polygon

#pip install shapely
from shapely.geometry import Polygon

p = Polygon([(x, y) for x, y in zip(df["Easting"], df["Northing"])])

输出:

print(type(p))
<class 'shapely.geometry.polygon.Polygon'>

print(str(p))

POLYGON ((416213.873 6507344.904, 424283.1 6509982.331, 428632.58 6496675.102, 418176.907 6493257.665, 415338.984 6501940.281, 416213.873 6507344.904))

相关问题