我有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'])
答案 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