首页 > 解决方案 > 是否有根据其他列值过滤列值的功能?

问题描述

首先,嗨 Stackoverflow.. 我是新来的,我会尽我所能写一个问题。

我有以下DF:

**Adress                                       Postalcode      City
0   Hammer Landstraße 91 41460 Neuss             41460         Neuss
1   Grebbeberglaan 15 unit 5 B 3527VX Utrecht   3527VX         Utrecht
2   Brink 88b 7411 BX, Deventer Nederland      7411 BX         Deventer
3   Flevolaan 58 Postbus 399 1380 AJ Weesp     1380 AJ         Weesp

我正在尝试根据邮政编码和城市值过滤地址列!我只是不知道如何:(

我想要的输出将是:

**Adress                                       Postalcode      City
0   Hammer Landstraße 91                         41460         Neuss
1   Grebbeberglaan 15 unit 5 B                  3527VX         Utrecht
2   Brink 88b Nederland                        7411 BX         Deventer
3   Flevolaan 58 Postbus 399                   1380 AJ         Weesp

我尝试了以下方法:

df1['Adress'] = filter(lambda i: not regex.search(df1[Postalcode]), df1[str('Adress')]). 

所以我想保留所有行,但根据其他两列的值更新(读取:删除) Adress 列的值。

但是,这将返回 df1 Adress 列的过滤器对象。你们中的任何人都可以帮助我吗?

任何提示我改进提问的方法总是受欢迎的!

标签: pythonpandasdataframe

解决方案


您是否正在寻找这样的东西:

import pandas as pd

data = [['Hammer Landstraße 91 41460 Neuss', "41460", "Neuss"], ['Brink 88b 7411 BX, Deventer Nederland', "7411 BX", "Deventer"]] 

df = pd.DataFrame(data, columns = ['Address', 'Postalcode', 'City']) 

df['Address'] = df.apply(lambda x: x['Address'].replace(x['Postalcode'], ''), axis=1)
df['Address'] = df.apply(lambda x: x['Address'].replace(x['City'], ''), axis=1)
df['Address'] = df.apply(lambda x: x['Address'].replace(', ', ''), axis=1)

最后一个只是删除逗号,可以合并为单行,但这对可见性更好

输出:

                  Address Postalcode      City
0  Hammer Landstraße 91        41460     Neuss
1    Brink 88b  Nederland    7411 BX  Deventer

推荐阅读