Python 使用pandas根据条件计算项目在单独数据框中出现的频率

Python 使用pandas根据条件计算项目在单独数据框中出现的频率,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,第一个是这样的,ID是唯一的值 ID Etc Etc2 001 foo bar 002 foo2 bar2 003 foo3 bar3 第二个是这样的,其中ID不是唯一的值,df1中的所有ID也不能保证出现在这个df(df2)中 我试图做的是在第一个数据框中添加一列,例如,如果ID与第一个数据框的ID列中的ID匹配,则该列将提供一个带有“红色”的类别计数。基本上就像excel中的索引匹配 第二个表中的ID可以出现多次

我有两个数据帧,第一个是这样的,ID是唯一的值

 ID     Etc     Etc2
 001    foo     bar
 002    foo2    bar2
 003    foo3    bar3
第二个是这样的,其中ID不是唯一的值,df1中的所有ID也不能保证出现在这个df(df2)中

我试图做的是在第一个数据框中添加一列,例如,如果ID与第一个数据框的ID列中的ID匹配,则该列将提供一个带有“红色”的类别计数。基本上就像excel中的索引匹配

第二个表中的ID可以出现多次,但在第一个表中只出现一次。第二个表中的类别值可以不同

我以为我用以下方法破解了它,但这并没有达到预期效果

new_df= pd.crosstab (df2['ID'],df2['CATEGORY'])
new_df = pd.crosstab(df1['SK_ID_CURR'],df2['NAME_CONTRACT_STATUS'])
但这给了我一个与初始数据帧长度不同的序列(并非第一个数据帧中的所有ID都显示在第二个数据帧中)

我也尝试了以下方法,但仍然没有达到预期效果

new_df= pd.crosstab (df2['ID'],df2['CATEGORY'])
new_df = pd.crosstab(df1['SK_ID_CURR'],df2['NAME_CONTRACT_STATUS'])
我相信,对于不匹配的值,需要获取
NaN
s行:

new_df= pd.crosstab (df2['ID'],df2['Category'])
print (new_df)
Category  Blue  Red
ID                 
1            0    2
3            1    1
4            0    1

df = df1.join(new_df, on='ID')
print (df)
   ID   Etc  Etc2  Blue  Red
0   1   foo   bar   0.0  2.0
1   2  foo2  bar2   NaN  NaN
2   3  foo3  bar3   1.0  1.0