我有两个csv文件作为 Dataframe A
和C
导入。我希望将content
列的字符串与data.data
中包含A
中的字符串的条目进行匹配。
A time_a content C time_c data.data
100 f00 400 otherf00other
101 ba7 402 onlyrandom
102 4242 407 otherba7other
409 other4242other
Should become:
time_a time_c content
100 400 f00
101 407 ba7
102 409 4242
我下面的解决方案使用迭代器。但它工作太慢。This answer解释了原因并给出了如何改进的方法。但我很难实现任何方法。
我怎样才能用Pandas的优化方法做到这一点呢?
# reset_index() on both df
df_alsa_copy = df_alsa.copy() # Never modify your iterator
df_alsa_copy['cap_fno'] = -1
for aIndex, aRow in df_alsa.iterrows():
for cIndex, cRow in df_c.iterrows():
if str(aRow['content']) in str(cRow['data.data']):
df_alsa_copy.loc[aIndex, 'cap_fno'] = df_c.loc[cIndex, 'frame.number']
# https://stackoverflow.com/questions/31528819/using-merge-on-a-column-and-index-in-pandas
# Merge on frame.number column (bc I chose it to be included in alsa_copy as a column)
df_ltnc = pd.merge(df_alsa_copy, df_c, left_on='cap_fno', right_on='frame.number')
还尝试了:
- 如果存在完全匹配,则会起作用:Pandas: Join dataframe with condition .
- 我还设法将第二帧与
series.str.contains
的已知字符串进行了匹配。 - 问题是,我无法在
merge on=
中输入匹配的 Dataframe 列。我只能输入已知的字符串。 - 当我使用
apply
时,出现了同样的问题。 - 我没有成功与
isin
或类似的。
更多信息:
A
保存我输入程序的带时间戳的内容。C
是网络捕获。我想知道输入和捕获之间的时间。我假设:
- 字符串在
A
和C
中的出现顺序相同。 - 但是在
C
中,可能会有一些线在中间。 - 字符串表示十六进制值。
data.data
包含其他字符以及我要查找的字符串。- 也许我缺少Pandas的词汇,要寻找正确的方法。
1条答案
按热度按时间eufgjt7s1#
使用
pandas.unique()
、pandas.Series.str.contains
和pandas.DataFrame.merge
尝试此方法