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])返回[]