如何配对并创建新的 DF

问题描述 投票:0回答:1

我有这个 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 是

我将它们更改为第一个 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)],
}
python pandas dataframe datetime group-by
1个回答
0
投票

所以,如果我理解你只是想创建一个名为“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'])
© www.soinside.com 2019 - 2024. All rights reserved.