【问题标题】:Extract strings from DataFrame, join with previous column and merge with another DataFrame从 DataFrame 中提取字符串,与上一列连接并与另一个 DataFrame 合并
【发布时间】:2020-07-16 15:33:25
【问题描述】:

我有两个 csv 文件/Pandas Dataframes 组织起来像

Sheet ID         Issue                                             Obs
P012CR0409F1-1,  P012CR0409F1-1-04, P012CR0409F1-1-05 crop again,
P012CR0427F1-1,  Missing image 08                               ,
P012V006-0018 ,  Missing images 01, 04, 05, 09                  ,

和

Image ID           Value1     Value2
P012CR0427F1-1-01  0.85839    0.76264

我需要最终得到一个数据框,该数据框本质上是带有两个额外布尔列的第二个数据框:crop again 和 missing。

因此,对于第一个新列,计划是使用(?P<crop>[\w-]+)(?=(?:\s*,\s*[\w-]+)*\s+crop again) 隔离图像代码,第二个(?!Missing? images?) (?P<missing>\d{2}) 隔离缺失的索引。

我正在努力解决如何 1. 将缺失的索引与它们的工作表 ID 连接起来以获取缺失的图像代码和 2. 将所有这些连接到最后一个数据帧中。我对 2D Pandas 并不差,但 extractall 函数返回一个 MultiIndex 对象,我无法真正理解如何操作。

非常感谢,

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    所以我最终做的是:

    df = pd.read_csv("./First.csv", names=["id", "issue", "obs"])
    df["crop"] = df["issue"].str.findall(
        r"(?P<crop>[\w-]+)(?=(?:\s*,\s*[\w-]+)*\s+crop again)"
    )
    df["missing"] = df["issue"].str.findall(
        r"(?!Missing images?) (?P<missing>\d{2})"
    )
    df = df.explode("crop")
    df = df.explode("missing")
    df["missing"] = df["id"] + "-" + df["missing"]
    crop = df["crop"].dropna()
    missing = df["missing"].dropna()
    

    从那里我将两者都用作系列,但在 Second.csv 中检查它们并添加布尔列会很简单。

    【讨论】:

      猜你喜欢
      • 2022-12-12
      • 2018-07-07
      • 1970-01-01
      • 2022-12-22
      • 2019-02-28
      • 2018-09-15
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多