[英]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 |
您還可以按shipid
和destination
分組:
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.