我有下表,其中包含出发地/目的地城市和作为起点-目的地路线上停靠点的额外城市。这是原产地奥格斯堡和目的地Telfs的一个例子。
origin | destination | city | city.1 | city.2 | city.3 | city.4 | city.5 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
样式>样式>样式>样式>样式>样式>样式> | |||||||||||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | Todtmoos | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | style="文本对齐:居中;"> | NaN Na | |||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | style="text-align: center;"> | NaN Na | |||||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | Todtmoos | style="文本对齐:居中;"> | NaN | NaN | NaNNaN | NaNNaN | |||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="文本对齐:居中;"> | NaN Na | ||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | Todtmoos | 雷姆塞克 | style="文本对齐:居中;"> | NaN Na | |||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="文本对齐:居中;">费尔德基兴 | NaN | ||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="文本对齐:居中;">费尔德基兴 | Wien | 纳 | 纳 | ||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | NaN Na | ||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | NaN Na | |||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | Ilshofen | NaN Na | ||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | style="text-align: center;"> | NaN Na | ||||||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | Ilshofen | Reutte | NaN | |||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | Todtmoos | 雷姆塞克 | 海尔布隆 | style="文本对齐:居中;"> | NaN Na | ||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | Todtmoos | 雷姆塞克 | style="文本对齐:居中;"> | ||||||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="文本对齐:居中;">Feldkirchen | |||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="文本对齐:居中;">费尔德基兴 | Wien | ||||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | |||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | ||||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | Ilshofen | |||||||||||||||
style="文本对齐:居中;">奥格斯堡 | Telfs | 奥格斯堡 | Telfs | 勒芬根 | 托德穆斯 | 雷姆塞克 | 海尔布隆 | 奥特斯韦尔 | 伊姆斯特 | style="text-align: center;">Feldkirchen | Wien | Hermagor | Aichdorf | Ilshofen |
这是一个可能的解决方案,其列名为"origin"
和"destination"
:
def get_start_and_end(row):
return row[row.last_valid_index()]
def get_number_of_unique_routes_by_group(group):
return len(group.apply(get_start_and_end, axis=1).unique())
df.groupby(["origin", "destination"]).apply(get_number_of_unique_routes_by_group)
输出:
origin destination
Augsburg Telfs 13
dtype: int64
您的示例数据帧仅包含一个此类组,但如果有其他起点-终点分组,它们也会显示在输出中。
IIUC:这是一个代码,标识有 13 条唯一路由,而不是 11 条。
import pandas as pd
df = pd.read_clipboard()
df = df[[x for x in df.columns if not 'Unnamed' in x]]
df = df.assign(hash=df.apply(lambda x: hash("".join(x.fillna("")[1:])), axis=1))
df.groupby(["origin", "destination", "hash"])["city"].count().count()