Python 获取包含字符串的列的计数

Python 获取包含字符串的列的计数,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有两个数据帧df1和df2 df1: df2: 我需要从df1中获取'0000D3447E',并获取包含此字符串的df2的列计数,然后通过创建一个新列来更新df1中的计数 给定答案df1['count\u of_colors']=df1['PartNumber'].map(df2['PartNumber'].str[:10]。value\u counts()) 可以解决这个问题,但是字符串不是10个字符的常量。因此,我得到了错误的字符串计数,因为字符串被限制为str[:10]个字符 谢谢。你可

我有两个数据帧df1和df2

df1:

df2:

我需要从df1中获取'0000D3447E',并获取包含此字符串的df2的列计数,然后通过创建一个新列来更新df1中的计数

给定答案df1['count\u of_colors']=df1['PartNumber'].map(df2['PartNumber'].str[:10]。value\u counts())
可以解决这个问题,但是字符串不是10个字符的常量。因此,我得到了错误的字符串计数,因为字符串被限制为str[:10]个字符

谢谢。

你可以使用地图

df1['count_of_colors'] = df1['PartNumber'].map(df2['PartNumber'].str[:10].value_counts())
df1:

编辑:使用str.extract提取df2中的精确匹配,然后使用相同的解决方案

pat = '({})'.format('|'.join(df1['PartNumber'].unique()))

df2['PartMatch'] = df2['PartNumber'].str.extract(pat, expand = False)

df1['count_of_colors'] = df1['PartNumber'].map(df2['PartMatch'].value_counts())

您得到的是相同的输出,并且它没有硬编码字符数

我想您只需要这个

df1['count_of_colors'] =df1['PartNumber'].map(df2['PartNumber'].value_counts())

我的密码在这里。它对我有用。。我无法复制你提供的所有数据,但这里有一个样本

import pandas as pd
df1= pd.DataFrame(["0000D3447E","0000F2892E"])
df1.columns=['data']
df2=pd.DataFrame(["0000D3447E","0000D3447E","0000D3447E","0000D3447E","0000F2892E"])
df2.columns=['data']

df1['count']= df1['data'].map(df2['data'].value_counts())

df1

在回答中,字符串长度限制为“str[:10]”。你能告诉我如何从df1中取出整根绳子吗?像df1['count\u of_colors']=df1['PartNumber'].map(df2['PartNumber'].str[:len(df2['PartNumber'].str)]。value\u counts())一样,我尝试过这个方法。但它没有给我任何计数。我没有得到任何错误。脚本通过了,但我没有看到数据帧中有任何计数更新。它与您发布的示例df一起工作。很难排除故障,如果问题不存在,谢谢你。它现在正在工作。我犯了一个错误,这就是为什么它没有提前工作。考虑接受正确解决你的问题的答案。如果两者都没有,请添加预期输出。我个人的事实是,你提供的样本数据将是零。考虑在添加预期输出之前更新问题中的数据。我已经尝试过。但是它也没有给我任何计数。当我使用这个代码时,“计数”列是空的。谢谢你,emdi。谢谢你的帮助。
pat = '({})'.format('|'.join(df1['PartNumber'].unique()))

df2['PartMatch'] = df2['PartNumber'].str.extract(pat, expand = False)

df1['count_of_colors'] = df1['PartNumber'].map(df2['PartMatch'].value_counts())
df1['count_of_colors'] =df1['PartNumber'].map(df2['PartNumber'].value_counts())
import pandas as pd
df1= pd.DataFrame(["0000D3447E","0000F2892E"])
df1.columns=['data']
df2=pd.DataFrame(["0000D3447E","0000D3447E","0000D3447E","0000D3447E","0000F2892E"])
df2.columns=['data']

df1['count']= df1['data'].map(df2['data'].value_counts())

df1