python - 如何加快pandas数据框中列的匹配速度

标签 python pandas

我正在尝试在 pandas 数据框中查找匹配的值。一旦找到匹配项,我想对数据帧的行执行一些操作。

目前我正在使用此代码:

import pandas as pd

d = {'child_id': [1, 2,5,4], 'parent_id': [3, 4,2,3], 'content':     ["a","b","c","d"]}

df = pd.DataFrame(data=d)

for i in range(len(df)):

        for j in range(len(df)):

            if str(df['child_id'][j]) == str(df['parent_id'][i]):
                print(df.content[i])
            else:
                pass

它工作正常,但相当慢。由于我正在处理包含数百万行的数据集,因此需要几个月的时间。有没有更快的方法来做到这一点?

编辑:为了澄清什么,我想创建一个数据框,其中包含匹配内容。

import pandas as pd

d = {'child_id': [1,2,5,4],
 'parent_id': [3,4,2,3],
 'content': ["a","b","c","d"]}

df = pd.DataFrame(data=d)

df2 = pd.DataFrame(columns = ("content_child", "content_parent"))

for i in range(len(df)):

    for j in range(len(df)):

        if str(df['child_id'][j]) == str(df['parent_id'][i]):
            content_child = str(df["content"][i])

            content_parent = str(df["content"][j])

            s = pd.Series([content_child, content_parent], index=['content_child', 'content_parent'])
            df2 = df2.append(s, ignore_index=True)
        else:
            pass

 print(df2)

最佳答案

最快的方法是使用 numpy 的功能:

import pandas as pd


d = {
  'child_id': [1, 2, 5, 4],
  'parent_id': [3, 4, 2, 3],
  'content': ["a", "b", "c", "d"]
}
df = pd.DataFrame(data=d)

comp1 = df['child_id'].values == df['parent_id'].values
comp2 = df['child_id'].values[::-1] == df['parent_id'].values
comp3 = df['child_id'].values == df['parent_id'].values[::-1]

if comp1.any() and not comp2.any() and not comp3.any():
  comp = np.c_[ df['content'].values[comp1] ]
elif comp1.any() and comp2.any() and not comp3.any():
  comp = np.c_[ df['content'].values[comp1], df['content'].values[comp2] ]
elif comp1.any() and comp2.any() and comp3.any():
  comp = np.c_[ df['content'].values[comp1], df['content'].values[comp2], df['content'].values[comp3] ]

print( df['content'].values[comp] )

哪些输出:

[]

关于python - 如何加快pandas数据框中列的匹配速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434265/

相关文章:

python - 将视频上传到 google app engine blobstore

python - 循环标记多个轴

python - 在多指标横截面的一个级别指定多个可能的标准

python - 类型错误 : bad operand type for unary ~: 'float'

python - 更改数据框中每个单元格的值以给表格着色

python - 不显示新添加的 Gtk.Notebook 页面

python - 在 python 中绘制实际设置的项目,而不是项目的数量

python - 提高 Pandas 数据框插补性能

Python 脚本根据一天中的时间更改壁纸

python - 如何禁用特定文件的 pylint 错误消息?