簡體   English   中英

使用循環或 numpy 創建新列以分配新 ID,其中

[英]To create a new column to assign a new ID using loop or numpy, where

我對 Python 有點陌生。 我正在研究運動數據。 我有 ID、位置、速度、時間和目的地列。 我的dataframe看起來像這樣:

船號 目的地 緯度 速度 時間
508040000 文萊 139.356 34.172 13 2016/01/12 16:44:03
508040000 文萊 139.356 34.173 12.9 2016/01/12 16:44:03
508040000 文萊 139.781 35.245 12.7 2016/01/12 16:44:03
508040000 釜山 139.358 34.172 15.8 2016/03/01 16:09:36
508040000 釜山 139.359 34.173 15.6 2016/03/01 16:10:06
508040000 釜山 139.362 34.177 15.9 2016/03/01 16:11:07
431000792 東京 139.673 34.842 11 2016/04/01 22:17:51
431000792 東京 139.683 34.914 11 2016/04/01 22:41:11
431000792 東京 139.684 34.926 10.3 2016/04/01 22:45:20
431000792 青海 140.760717 40.8771 0.1 2016/05/03 22:03:02
431000792 青海 140.759967 40.877033 0 2016/05/03 23:54:19
431000792 青海 140.760117 40.876917 0 2016/05/04 0:06:00

我想循環或迭代 ID 和目的地以創建一個新的行程 ID 列。

船號 目的地 緯度 速度 時間 三倍體
508040000 文萊 139.356 34.172 13 2016/01/12 16:44:03 1
508040000 文萊 139.356 34.173 12.9 2016/01/12 16:44:03 1
508040000 文萊 139.781 35.245 12.7 2016/01/12 16:44:03 1
508040000 釜山 139.358 34.172 15.8 2016/03/01 16:09:36 2
508040000 釜山 139.359 34.173 15.6 2016/03/01 16:10:06 2
508040000 釜山 139.362 34.177 15.9 2016/03/01 16:11:07 2
431000792 東京 139.673 34.842 11 2016/04/01 22:17:51 1
431000792 東京 139.683 34.914 11 2016/04/01 22:41:11 1
431000792 東京 139.684 34.926 10.3 2016/04/01 22:45:20 1
431000792 青海 140.760717 40.8771 0.1 2016/05/03 22:03:02 2
431000792 青海 140.759967 40.877033 0 2016/05/03 23:54:19 2
431000792 青海 140.760117 40.876917 0 2016/05/04 0:06:00 2

所以我寫如下

for shipid in df.shipid.unique():
    tripid=1
    for destination in df.destination.unique():
        df['tripid'] = np.where(df['destination']==df['destination'].shift(-1),tripid, tripid+1)

該代碼創建了一個新列tripid ,其中每一行都分配了“1”,除了每個目的地的最后一行,其中分配了“2”。

我想為目的地與 1、2、3 相同的每艘船分配一個唯一 ID。

我不確定要使用什么,循環或迭代等。我嘗試將它用於循環,錯誤顯示該系列不明確。

這能解決你的問題嗎?

import pandas as pd

# Example dataframe:
df = pd.DataFrame(
    {'shipid': [1, 1, 1, 1, 1, 2, 2],
    'destination': ['Brunei', 'Brunei', 'Brunei', 'Busan', 'Busan', 'Tokyo', 'Tokyo']}
)

df['tripid'] = df.groupby(['destination']).cumcount() + 1
船號 目的地 三倍體
1 文萊 1
1 文萊 2
1 文萊 3
1 釜山 1
1 釜山 2
2 東京 1
2 東京 2

您還可以按shipiddestination分組:

df['tripid'] = df.groupby(['shipid', 'destination']).cumcount() + 1

或者也許你需要這個?

https://stackoverflow.com/a/51329888/14627505

df['tripid'] = df.groupby(['shipid', 'destination']).ngroup() + 1
船號 目的地 三倍體
1 文萊 1
1 文萊 1
1 文萊 1
1 釜山 2
1 釜山 2
2 東京 3
2 東京 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM