Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何加快数据帧中列的匹配_Python_Pandas - Fatal编程技术网

Python 如何加快数据帧中列的匹配

Python 如何加快数据帧中列的匹配,python,pandas,Python,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)):

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

目前我正在使用以下代码:

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
它工作正常,但相当慢。因为我要处理一个有数百万行的数据集,所以我需要几个月的时间。有没有更快的方法

编辑:为了澄清什么,我想创建一个dataframe,它包含匹配的内容

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)

最快的方法是使用以下功能:

将熊猫作为pd导入
d={
“儿童id”:[1,2,5,4],
“家长id”:[3,4,2,3],
“内容”:[“a”、“b”、“c”、“d”]
}
df=pd.DataFrame(数据=d)
comp1=df['child\u id']。值==df['parent\u id']。值
comp2=df['child\u id']。值[::-1]==df['parent\u id']。值
comp3=df['child\u id']。值==df['parent\u id']。值[:-1]
如果comp1.any()和非comp2.any()和非comp3.any():
comp=np.c_df[content'].值[comp1]]
elif comp1.any()和comp2.any()而不是comp3.any():
comp=np.c_df[content'].值[comp1],df['content'].值[comp2]]
elif comp1.any()和comp2.any()和comp3.any():
comp=np.c_Udf[content'].值[comp1],df['content'].值[comp2],df['content'].值[comp3]]
打印(df['content'].值[comp])
哪些产出:

[]

最快的方法是使用以下功能:

将熊猫作为pd导入
d={
“儿童id”:[1,2,5,4],
“家长id”:[3,4,2,3],
“内容”:[“a”、“b”、“c”、“d”]
}
df=pd.DataFrame(数据=d)
comp1=df['child\u id']。值==df['parent\u id']。值
comp2=df['child\u id']。值[::-1]==df['parent\u id']。值
comp3=df['child\u id']。值==df['parent\u id']。值[:-1]
如果comp1.any()和非comp2.any()和非comp3.any():
comp=np.c_df[content'].值[comp1]]
elif comp1.any()和comp2.any()而不是comp3.any():
comp=np.c_df[content'].值[comp1],df['content'].值[comp2]]
elif comp1.any()和comp2.any()和comp3.any():
comp=np.c_Udf[content'].值[comp1],df['content'].值[comp2],df['content'].值[comp3]]
打印(df['content'].值[comp])
哪些产出:

[]

你所指的“某些操作”是什么。当您找到匹配项时,您想做什么?您的意思是
df.loc[df.parent\u id.isin(df.child\u id),'content']
??如果不是,您能否解释一下,对于最终的预期数据帧,您到底想做什么?可能不需要循环。如果找到匹配项,我想提取第I行和第j行“Content”列的值。@zacha2是否在任何行或同一行中匹配?如果是同一行,我想您需要
df.loc[df.parent\u id.eq(df.child\u id),'content']
否则我以前的comment@anky_91这很有效。但是我需要使用child_id和内容从行中删除内容。我编辑了最初的帖子来澄清我想做什么。你指的是什么“某种操作”。当您找到匹配项时,您想做什么?您的意思是
df.loc[df.parent\u id.isin(df.child\u id),'content']
??如果不是,您能否解释一下,对于最终的预期数据帧,您到底想做什么?可能不需要循环。如果找到匹配项,我想提取第I行和第j行“Content”列的值。@zacha2是否在任何行或同一行中匹配?如果是同一行,我想您需要
df.loc[df.parent\u id.eq(df.child\u id),'content']
否则我以前的comment@anky_91这很有效。但是我需要使用child_id和内容从行中删除内容。我编辑了最初的帖子以澄清我想要的内容。输出应该是[b,c]你是说comp=df['child_id']吗。值==df['parent_id']。值打印(df['content'].values[comp])这返回[]输出应该是[b,c]你是说comp=df['child_id']吗。值==df['parent_id']。值打印(df['content']。值[comp])返回[]