首页 > 解决方案 > 系列驱动的多个条件

问题描述

我有一个数据框来存储一个人的居住地,它看起来像这样:

教派 软垫 房间
1 一个 101 人 1
1 一个 102 人2
1 101 人 3
2 一个 103 人4
2 C 102 PERSON5

我还有另一个数据框,它指定了使该住房单元特别的所有 SECT/PAD/ROOM 组合(注意:如果不存在 start_room 和 end_room,则意味着该 sect/pad 中的所有房间都是特殊的):

教派 软垫 房间 START_ROOM END_ROOM
1 一个 101 100 104
1 一个 102
1 C 101 105 500

有没有办法使用“特殊”数据框识别所有“特殊”住房单元,然后在第一个数据框中添加一个新列来标记它们。“特殊”数据框要大得多,如果我必须手动执行条件 .loc 语句来识别所有特殊住房单元,那将需要很长时间。我希望能够以编程方式匹配它们

标签: pythonpandasdataframe

解决方案


由于空行意味着所有房间都是特殊的,因此您可以用虚拟值(第一个 df 的最小值和最大值)填充它们,然后从合并的 DataFrame 中获取所需的结果。

假设您的 DataFrames 是df1and df2,您可以这样做:

df2["START_ROOM"] = df2["START_ROOM"].fillna(df1["ROOM"].min())
df2["END_ROOM"] = df2["START_ROOM"].fillna(df1["ROOM"].max())

merged = df1.merge(df2, on=["SECT", "PAD", "ROOM"], how="left")
result = df1[df1["PERSON"].isin(merged.dropna()["PERSON"].tolist())]

>>> result
   SECT PAD  ROOM   PERSON
0     1   A   101  PERSON1
1     1   A   102  PERSON2

推荐阅读