从两个相等的列中计算具有不同列的行数



我有下表,其中包含出发地/目的地城市和作为起点-目的地路线上停靠点的额外城市。这是原产地奥格斯堡和目的地Telfs的一个例子。

city.6<样式>城市.7<样式>城市.8<样式>城市.9<样式>城市.10<样式>城市.11<样式>城市.12<样式>城市.13style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">style="文本对齐:居中;">奥格斯堡style="text-align: center;">style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">NaNNaNstyle="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">费尔德基兴style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">费尔德基兴style="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">style="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">style="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="文本对齐:居中;">费尔德基兴style="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchenstyle="文本对齐:居中;">奥格斯堡style="text-align: center;">Feldkirchen
origin destination city city.1 city.2 city.3 city.4 city.5
Telfs奥格斯堡Telfs勒芬根Todtmoos雷姆塞克海尔布隆奥特斯韦尔NaN Na
Telfs奥格斯堡Telfs勒芬根NaN Na
Telfs奥格斯堡Telfs勒芬根TodtmoosNaNNaNNaNNaN
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特NaN Na
Telfs奥格斯堡Telfs勒芬根Todtmoos雷姆塞克NaN Na
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特NaN
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特Wien
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorNaN Na
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorfNaN Na
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorfIlshofenNaN Na
Telfs奥格斯堡TelfsNaN Na
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorfIlshofenReutteNaN
Telfs奥格斯堡Telfs勒芬根Todtmoos雷姆塞克海尔布隆NaN Na
Telfs奥格斯堡Telfs勒芬根Todtmoos雷姆塞克
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特Wien
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagor
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorf
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorfIlshofen
Telfs奥格斯堡Telfs勒芬根托德穆斯雷姆塞克海尔布隆奥特斯韦尔伊姆斯特WienHermagorAichdorfIlshofen

这是一个可能的解决方案,其列名为"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()

相关内容

  • 没有找到相关文章

最新更新