【问题标题】:Replacing certain values in a column to match by another column替换列中的某些值以与另一列匹配
【发布时间】:2022-07-25 22:16:21
【问题描述】:

我是 Python 新手,如果遇到一个非常简单的问题,我深表歉意。 我在下面有以下示例数据框(真实的有数千行)

df = {'City': ['London','Tokyo','London','Paris','Paris','London','Tokyo','Tokyo', 'Paris','Berlin','Berlin','Berlin'], 
      'Code': ['367','812','367','964','964','BN611','812','Y366','Z167','L715','412','L715']}
df = pd.DataFrame(data=df)

我要做的是将城市代码以字母开头的所有实例替换为其等效数字(例如,伦敦出现的每一行的代码应始终为 367 而不是 367 和 BN611) .

有没有一种方法可以轻松地做到这一点,而不必分别为每个城市编写代码?我拥有的数据框包含数百个城市,我需要将其应用于每个城市。每个城市的代码总是相同的(例如伦敦总是有代码 367 和 BN611 等)

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以mask 无效代码并使用groupby.transform 替换有效代码:

    m = df['Code'].str.match(r'[A-Z]')
    df['Code'] = df['Code'].mask(m).groupby(df['City']).transform('first')
    

    输出(为清楚起见,作为新列“Code2”):

          City   Code Code2
    0   London    367   367
    1    Tokyo    812   812
    2   London    367   367
    3    Paris    964   964
    4    Paris    964   964
    5   London  BN611   367
    6    Tokyo    812   812
    7    Tokyo   Y366   812
    8    Paris   Z167   964
    9   Berlin   L715   412
    10  Berlin    412   412
    11  Berlin   L715   412
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多