首页 > 解决方案 > Python pandas 总结了数据框中的往返行程

问题描述

我有一个按车站代码计算的数据框(约 30 000 行)的行程计数。

|station from|station to|count|
|:-----------|:---------|:----|
|20001       |20040     |55   |
|20040       |20001     |67   |
|20007       |20080     |100  |
|20080       |20007     |50   |

怎么可能在有多次回程的地方获得 df 并且删除了额外的回程行,例如

|station from|station to|count|count_back|
|:-----------|:---------|:----|:---------|
|20001       |20040     |55   |67        |
|20007       |20080     |100  |50        |

我的解决方案是

  1. 复制数据框
  2. 制作复合键,更改重复数据框中的出发站和目的地站
  3. 合并
  4. 删除不必要的列和行。

但这似乎效率很低

标签: pythonpandasdataframe

解决方案


这是一个简单的解决方案,无需往返即可处理案件。

import pandas as pd
import numpy as np
df = pd.DataFrame({"station from":[20001,20040,20007,20080, 2, 3],
                   "station to":[20040,20001,20080,20007, 1, 4],
                   "count":[55,67,100,50, 20, 40]})
df

在此处输入图像描述

df = df.set_index(["station from", "station to"])
df["count_back"] = df.apply(lambda row: df["count"].get((row.name[::-1])), axis=1)
mask_rows_to_delete = df.apply(lambda row: row.name[0] > row.name[1] and row.name[::-1] in df.index, axis=1)
df = df[~mask_rows_to_delete].reset_index()
df

在此处输入图像描述


推荐阅读