我有一个 Dataframe ,其中sig列有字符串,它是作为一个或一组字符串来的。如果我想只提取 Dataframe ,其中我的字符串匹配,我该怎么做?
df = pd.DataFrame()
df['sig'] = ['301','302','303','405','405 409','302 301','303 301','405','560','309','301 302 303','303 304','305','305 304 303 302 301', '555','565','301 302 303 304']
df['val'] = [45,25,1,54,12,51,52,1,4,152,786,145,1,555,7595,77,89]
如果我添加字符串'301 302 303'
来查找相同的匹配项,以及它包含组合的位置,但它也会提供包含301 302 303 304
或类似内容的其他行,我尝试了这种方法
dtc = '301 302 303'
dtcs = dtc.split()
x = df['sig'].str.contains(dtcs[0])
for i in range (1, len(dtcs)):
x = x | df['sig'].str.contains(dtcs[i])
df_dtc = df[x]
print(df_dtc)
print('****************')
输出如下
# output
sig val
0 301 45
1 302 25
5 302 301 51
6 303 301 52
10 301 302 303 786
13 305 304 303 302 301 555
16 301 302 303 304 89
****************
sig val
0 301 45
1 302 25
2 303 1
5 302 301 51
6 303 301 52
10 301 302 303 786
11 303 304 145
13 305 304 303 302 301 555
16 301 302 303 304 89
预期输出
output
sig val
301 45
302 25
303 1
302 301 51
303 301 52
301 302 303 786
这意味着它的所有组合,没有重复,只得到确切的或组合的,因为你可以看到,它不是添加行
303 304
305 304 303 302 301
301 302 303 304 etc.....
我该怎么做?
2条答案
按热度按时间dsekswqp1#
下面是一个有点丑陋,但做什么,我相信是你正在寻找的...
df.query('row_of_interest')
传回...这假定sig非空。
goucqfw62#
只需首先使用
split
字符串,然后使用itertools.permutations
并连接字符串匹配的 Dataframe 。此操作的预期输出如下