【问题标题】:Pandas vectorized string comparison operations with 2 columns具有 2 列的 Pandas 矢量化字符串比较操作
【发布时间】:2020-08-07 12:25:24
【问题描述】:
import pandas as pd

df = pd.DataFrame({
    'Route': pd.Categorical(["ChicagoVenice", "MiamiAtlanta", "BirminghamLondon", "BostonRome"]),
    'City1': pd.Categorical(["Venice", "Miami", "London", "Boston"]),
    })
              Route   City1
0     ChicagoVenice  Venice
1      MiamiAtlanta   Miami
2  BirminghamLondon  London
3        BostonRome  Boston

我想计算另一列 City2,它将 Route 与 City1 进行比较并提取剩余的字符串。

              Route   City1       City2
0     ChicagoVenice  Venice     Chicago
1      MiamiAtlanta   Miami     Atlanta
2  BirminghamLondon  London  Birmingham
3        BostonRome  Boston        Rome

我考虑过将 string.split() 与 numpy.vectorize() 一起使用,但我不知道如何将其正确应用于 2 列。

def get_city2(route, city1):
    route_split = route.split(city1)
    city2 = ''.join(route_split).split()[0]
    return city2

df['City2'] = np.vectorize(get_city2)(df['Route'], df['City1'])[1]

我的结果不是我想要的:-(

              Route   City1    City2
0     ChicagoVenice  Venice  Atlanta
1      MiamiAtlanta   Miami  Atlanta
2  BirminghamLondon  London  Atlanta
3        BostonRome  Boston  Atlanta

有没有人知道如何在不循环的情况下解决这个问题?如果可能的话,我会倾向于一个简洁的矢量化解决方案。

谢谢!

【问题讨论】:

    标签: python-3.x pandas string vectorization


    【解决方案1】:

    这个怎么样?

    df['City2']=df.apply(lambda x : x.Route.replace(x.City1,''),axis=1)
    

    【讨论】:

    • 这是一个非常好的解决方案,简短而高效。我喜欢!我想 np.vectorized() 选项在需要完成更复杂的任务时可能更合适......
    【解决方案2】:

    我自己弄的,功能其实都很好,只是np.vectorize赋值有一点小错误。

    现在它就像一个魅力。 :-)

    df['City2'] = np.vectorize(get_city2)(df['Route'], df['City1'])
    

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2016-06-25
      • 2012-10-11
      • 1970-01-01
      相关资源
      最近更新 更多