根据自定义条件过滤 csv 中的行

假设我有一个如下所示的 csv


+-----+-----------+---------+

| ID  | state     | city    |

+-----+-----------+---------+

| 101 | READY     |         |

| 101 | DELIVERED | NEWYORK |

| 101 | DELIVERED | LONDON  |   

| 102 | READY     |         |

| 102 | DELIVERED | LONDON  |

| 103 | READY     |         |

| 103 | DELIVERED | NEWYORK |

| 104 | READY     |         |

| 104 | DELIVERED | TOKYO   |

| 104 | DELIVERED | PARIS   |

| 105 | DELIVERED | NEWYORK |

+-----+-----------+---------+

现在我想要带有 State 的 ID,READY它有DELIVEREDas NEWYORK。


相同的 ID 会在不同的州和城市出现多次。

总是READYcity为空

cityDELIVERED总是有一些值。

city所以首先我想检查DELIVERED列的值state。如果是 NEWYORK,则取该 ID 的 READY 行。如果没有对应READY的行,那么我们可以忽略(本例中的 ID 105)


预期产出


+-----+-----------+---------+

| ID  | state     | city    |

+-----+-----------+---------+

| 101 | READY     |         |

| 103 | READY     |         |

+-----+-----------+---------+

我试过在熊猫中使用自我加入。但是我不知道如何继续,因为我是 python 的新手。目前我正在用 SQL 做这件事。


import pandas as pd

mydata = pd.read_csv('C:/Mypython/Newyork',encoding = "ISO-8859-1")

NY = pd.merge(mydata,mydata,left_on='ID',right_on='ID',how='inner')


隔江千里
浏览 134回答 2
2回答

拉风的咖菲猫

让我们尝试用布尔索引来groupby().transform()识别那些:NEWYORKhas_NY = df['city'].eq('NEWYORK').groupby(df['ID']).transform('any')mask = df['state'].eq('READY') & has_NYdf[mask]输出:    ID  state  city0  101  READY  None5  103  READY  None

慕工程0101907

使用NEWYORK条件获取 ID 列表,然后使用该列表进行过滤。new_york_ids = df.loc[df['city']=='NEWYORK', 'ID']df[(df['state']=='READY') & (df['ID'].isin(new_york_ids))]    ID  state  city0  101  READY  None5  103  READY  None
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python