我有这个 df,其中存在 2 艘船的 mmsi 及其坐标以及日期时间。
我正在尝试创建一个新的 df,其中第一列是对
对 | 开始时间 | 结束时间 | 自己的坐标 | 目标坐标 |
---|---|---|---|---|
[212979000,219592000] | 日期 - 19:07:20 | 日期-19:07:20 | 奥拉特,奥隆 | tlat,tlon |
[21297900,245451000] | 日期 - 22:40:00 | 日期-22:41:00 | 奥拉特,奥隆 | tlat,tlon |
我尝试了分组,甚至应用了许多逻辑,但现在已经很有效了。我怎样才能通过配对和获取时间框架来实现这一目标。
我将它们更改为第一个 df
df2 = result.groupby(['own_mmsi', 'target_mmsi', 'datetime']).apply(
lambda x: pd.Series({
'own_lat': x['own_geometry'].iloc[0].y, # Extract latitude from own_geometry
'own_lon': x['own_geometry'].iloc[0].x, # Extract longitude from own_geometry
'target_lat': x['target_geometry'].iloc[0].y, # Extract latitude from target_geometry
'target_lon': x['target_geometry'].iloc[0].x # Extract longitude from target_geometry
})).reset_index()
重新创建 df 的示例代码:
data = {
'own_mmsi': [1, 1, 2, 2],
'target_mmsi': [10, 10, 20, 20],
'datetime': ['2022-01-01 19:07:00', '2022-01-01 19:10:00', '2022-01-02 22:31:00', '2022-01-02 22:34:00'],
'own_geometry': [Point(1, 2), Point(3, 4), Point(5, 6), Point(7, 8)],
'target_geometry': [Point(10, 20), Point(30, 40), Point(50, 60), Point(70, 80)],
}
所以,如果我理解你只是想创建一个名为“pairs”的新列。然后你就可以这样做。
import pandas as pd
data = {
'own_mmsi': [1, 1, 2, 2],
'target_mmsi': [10, 10, 20, 20],
'datetime': ['2022-01-01 19:07:00', '2022-01-01 19:10:00', '2022-01-02 22:31:00', '2022-01-02 22:34:00'],
'own_geometry': ['Point (1, 2)', 'Point (3, 4)', 'Point (5, 6)', 'Point (7, 8)'],
'target_geometry': ['Point (10, 20)', 'Point (30, 40)', 'Point (50, 60)', 'Point (70, 80)'],
}
df = pd.DataFrame(data)
# make new column
df['paris'] = ''
# iterate columns
for index, row in df.iterrows():
df.loc[index, 'paris'] = str(row['own_mmsi']) + "," + str(row['target_mmsi'])