使用熊猫根据条件计算某项出现在单独数据框中的频率

时间:2018-07-18 11:15:22

标签: python pandas dataframe

我有2个数据框,第一个是这样,ID是唯一值。

 ID     Etc     Etc2
 001    foo     bar
 002    foo2    bar2
 003    foo3    bar3

第二个类似这样的情况,即ID不是唯一值,也不保证df1中的所有ID都出现在此df(df2)中。

ID   Category    
001  "Red"
001  "Red"
003  "Blue"
003  "Red"
004  "Red"

我想做的是在第一个数据帧中添加一列,例如,如果ID与第一个数据帧的ID列中的ID匹配,则使用“红色”提供类别计数。基本上就像excel中的索引匹配一样。

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

我以为我用以下内容破解了它,但这并不能按预期工作。

new_df= pd.crosstab (df2['ID'],df2['CATEGORY'])

但这给了我一个长度与初始数据帧不同的系列(不是第一个数据帧中的所有ID都出现在第二个数据帧中)

我也尝试了以下操作,但再次无法按预期工作。

new_df = pd.crosstab(df1['SK_ID_CURR'],df2['NAME_CONTRACT_STATUS'])

1 个答案:

答案 0 :(得分:3)

我认为需要join,因为没有匹配的值会得到NaN的行:

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