我有一个excel文件,包含如下所示的三列,
<表类>
ID
名称
日期
tbody><<tr>1136 GG Daubringen 2019-04-08 1136 Manheinm 2020-06-16 1136 Manheinm Streitkof 2020-07-24 1136 Staufenberg 2020-08-15 1136 Sturcken 2021-03-05 1136 Sturcken (FTTH) 2021-09-13 1234 Lerbeck 2019-04-18 1234 坏oyehausen 2020-06-26 1234 Werre公园 2020-07-14 1234 Werre公园(FTTH) 2020-08-25 1234 Werre公园(FTTH) 2021-03-15 1234 坏oyehausen 2021-09-23 表类>
可以聚合GroupBy.first
GroupBy.last
优先,Series.str.startswith
和Series.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]
需要DataFrame:
out = i.to_frame(index=False)
print (out)
ID
0 1234
如果需要first
而不需要(FTTH)
,last
而不需要(FTTH)
,请使用:
i = df1.index[~df1['first'].str.startswith('(FTTH)') & df1['last'].str.endswith('(FTTH)')]
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