【问题标题】:How to find the change of text based on a unique value on another column in an excel file using Python如何使用 Python 根据 Excel 文件中另一列的唯一值查找文本更改
【发布时间】:2022-11-30 18:40:23
【问题描述】:

我有一个包含三列的 excel 文件,如下所示,

ID Name Date
117 Laspringe 2019-04-08
117 Laspringe (FT) 2020-06-16
117 Laspringe (Ftp) 2020-07-24
999 Angelo 2020-04-15
999 Angelo(FT) 2021-03-05
999 Angelo(Ftp) 2021-09-13
999 Angelo 2022-02-29

我想根据每个 ID 找出名称从原始名称更改为相同的原始名称。例如安吉洛改为安杰洛(FT),安吉洛(FTP)并改回原来的安吉洛.

然而拉斯普林格没有改回原来的名字。

是否有可能找出哪些 ID 使用 python 将名称改回原来的名称?

期待结果是这样的,

ID
999

【问题讨论】:

    标签: python python-3.x pandas csv


    【解决方案1】:

    一种简单的方法可能是检查每个组的名称是否重复:

    s = df.duplicated(['ID', 'Name']).groupby(df['ID']).any()
    out = s[s].index.tolist()
    

    输出:[999]

    如果你可以重复:

    s = (df
      .sort_values(by='Date')
      .groupby('ID')['Name']
      .agg(lambda s: s[s.ne(s.shift())].duplicated().any())
    )
    out = s[s].index.tolist()
    

    两个代码在此输入上的行为不同:

        ID             Name        Date
    0  117        Laspringe  2019-04-08
    1  117        Laspringe  2019-04-09 # duplicated but no intermediate name
    2  117   Laspringe (FT)  2020-06-16
    3  117  Laspringe (Ftp)  2020-07-24
    4  999           Angelo  2020-04-15
    5  999       Angelo(FT)  2021-03-05
    6  999      Angelo(Ftp)  2021-09-13
    7  999           Angelo  2022-02-29
    

    【讨论】:

    • 如果名称再次改回其他名称,它将失败。您还需要考虑日期列
    • @Epsi95 不会因为这个原因而失败,我添加了另一种方法是顺序很重要(这样 A -> A -> B 不被认为是重复的)
    • 我测试了,只是失败了,你需要添加sort_values步骤
    • @Epsi95 也许我们对这个问题有不同的解释。我知道 A -> B -> A -> C 应该匹配,因为至少有一个改回旧名称
    • 你是对的,这个问题在这方面似乎很模糊。
    【解决方案2】:

    使用 pandas.DataFrame.groupby 与 first 和 last 的命题:

    df['Date'] = pd.to_datetime(df['Date'])
    ​
    out = (
            df
              .sort_values(by='Date')
              .groupby('ID')['Name']
                .agg(['first','last'])
                .reset_index()
                .loc[lambda x: x['first'].eq(x['last'])]
                [['ID']]
            )
    

    # 输出 :

    print(out)
    ​
        ID
    1  999
    
    #<class 'pandas.core.frame.DataFrame'>
    

    注意:2022 不是闰年,所以没有 2022-02-29

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多