csv 如何使用Python根据excel文件中另一列中包含特定名称的id进行过滤

o7jaxewo  于 2022-12-15  发布在  Python
关注(0)|答案(2)|浏览(122)

我有一个包含三列的excel文件,如下所示,
| 识别号|姓名|日期|
| - ------|- ------|- ------|
| 小行星|GG道布林根|2019年4月8日|
| 小行星|曼海因姆|2020年6月16日|
| 小行星|曼海姆·斯特里特科夫|2020年7月24日|
| 小行星|施陶芬贝格|2020年8月15日|
| 小行星|施蒂尔肯|二○二一年三月五日|
| 小行星|施图尔肯(FTTH)|二〇二一年九月十三日|
| 1234|莱尔贝克|2019年4月18日|
| 1234|巴德奥耶豪森|二〇二〇年六月二十六日|
| 1234|维尔公园|2020年7月14日|
| 1234|维尔公园(FTTH)|2020年8月25日|
| 1234|维尔公园(FTTH)|二〇二一年三月十五日|
| 小行星1234|巴特奥耶豪森|二〇二一年九月二十三日|
是否可以过滤掉名称以开头的ID**(FTTH)并且名称结尾不带(FTHH),例如,第一个ID 1136的名称不是以开头(FTTH),但结尾为(FTTH),但我想过滤掉不以(FTTH)开头也不以(FTTH)结尾的ID,如ID 1234**,是否可以使用python??过滤?
希望结果是这样的,
| 识别号|
| - ------|
| 1234|

mpbci0fu

mpbci0fu1#

您可以先聚合GroupBy.firstGroupBy.last,然后筛选Series.str.startswithSeries.str.endswith的索引:

df1 = df.groupby('ID')['Name'].agg(['first','last'])

i = df1.index[~df1['first'].str.startswith('(FTTH)') & ~df1['last'].str.endswith('(FTTH)')]
print (i)
#Int64Index([1234], dtype='int64', name='ID')

如果需要列表中的值:

L = i.tolist()
[1234]

如果需要数据框:

out = i.to_frame(index=False)
print (out)
     ID
0  1234

如果需要不带(FTTH)first以及带(FTTH)last,请用途:

i = df1.index[~df1['first'].str.startswith('(FTTH)') & df1['last'].str.endswith('(FTTH)')]
zpgglvta

zpgglvta2#

s = ~df['Name'].str.endswith('(FTTH)')
s.groupby(df['ID']).agg(['first', 'last']).all(axis=1)[lambda x:x].reset_index()[['ID']]

输出:

ID
0   1234

相关问题