有没有一种方法可以从不同的数据集中找出另一列中每次出现的列值



我有两个数据集:dataset1&dataset2(提供图像链接(,其具有作为字符串对象的名为SAX的公共列。

dataset1=
SAX
0    glngsyu
1    zicobgm
2    eerptow
3    cqbsynt
4    zvmqben
..       ...
475  rfikekw
476  bnbzvqx
477  rsuhgax
478  ckhloio
479  lbzujtw
480 rows × 2 columns

dataset2 =
SAX     timestamp
0   hssrlcu 16015
1   ktyuymp 16016
2   xncqmfr 16017
3   aanlmna 16018
4   urvahvo 16019
... ... ...
263455  jeivqzo 279470
263456  bzasxgw 279471
263457  jspqnqv 279472
263458  sxwfchj 279473
263459  gxqnhfr 279474
263460 rows × 2 columns

每当dataset1SAX列中的值存在于dataset2SAX列中时,我需要查找并打印出时间戳。是否有实现上述功能/方法?

谢谢。

让我们创建一个任意的数据集来展示它的工作原理:

import pandas as pd
import numpy as np
def sax_generator(num):
return [''.join(chr(x) for x in np.random.randint(97, 97+26, size=4)) for _ in range(num)]
df1 = pd.DataFrame(sax_generator(10), columns=['sax'])
df2 = pd.DataFrame({'sax': sax_generator(10), 'timestamp': range(10)})

让我们看看数据:

df1 = 
|    | sax   |
|---:|:------|
|  0 | cvtj  |
|  1 | fmjy  |
|  2 | rjpi  |
|  3 | gwtv  |
|  4 | qhov  |
|  5 | uriu  |
|  6 | kpku  |
|  7 | xkop  |
|  8 | kzoe  |
|  9 | nydj  |
df2 =
|    | sax   |   timestamp |
|---:|:------|------------:|
|  0 | kzoe  |           0 |
|  1 | npyo  |           1 |
|  2 | uriu  |           2 |
|  3 | hodu  |           3 |
|  4 | rdko  |           4 |
|  5 | pspn  |           5 |
|  6 | qnut  |           6 |
|  7 | gtyz  |           7 |
|  8 | gfzs  |           8 |
|  9 | gcel  |           9 |

现在确保我们在df2df1中有一些匹配的值,我们可以稍后检查:

df2['sax'][2] = df1['sax'][5]
df2['sax'][0] = df1['sax'][8]

然后使用:

df2.loc[df1.sax.apply(lambda x: df2.sax.str.contains(x)).any(), 'timestamp']

获取:

|    |   timestamp |
|---:|------------:|
|  0 |           0 |
|  2 |           2 |

使用这里的np.where文档,您也可以取回索引:

np.where(df1.sax.apply(lambda x: df2.sax.str.contains(x)) == True)
# -> (array([5, 8]), array([2, 0]))

在这里,我们可以看到df1有匹配的索引[5, 8]df2[2, 0],这正是我们用上面的行强制执行的。。。如果我们看一下df1.sax.apply(lambda x: df2.sax.str.contains(x))的返回,上面的结果与索引完全匹配(魔术…哇(:

|    |   0 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |
|---:|----:|----:|----:|----:|----:|----:|----:|----:|----:|----:|
|  0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  1 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  2 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  3 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  4 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  5 |   0 |   0 |   1 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  6 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  7 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  8 |   1 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |
|  9 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |

步骤1:使用:将numpy导入为np将数据集2转换为dict进口熊猫作为pd

a_dictionary = df.to_dict['list]

步骤2:在for循环中使用比较器提取时间戳

lookup_value = "abcdef" #This can be a list item.
all_keys = []
for key, value in a_dictionary.items():
if(value == lookup_value):
all_keys.append(key)
print(all_keys)

第三步:享受

相关内容

最新更新