我有两个不同维度的数据帧。只有当df2
和df1
的列值[UserId,Month]匹配时,才需要从df2
更新df1中的msg_count
我的数据如下:
df1:
UserID Month A B C D E F msg_count
knaas 1/1/2017 0 0 0 0 0 0 0
knaas 2/1/2017 0 0 0 0 0 0 0
knaas 3/1/2017 0 0 0 0 0 0 0
knaas 4/1/2017 0 0 0 2 0 0 0
knaas 5/1/2017 0 0 0 0 0 0 0
knaas 6/1/2017 0 0 0 0 0 0 0
knaas 7/1/2017 0 0 0 0 0 0 0
knaas 8/1/2017 0 0 0 0 0 0 0
knaas 9/1/2017 0 0 0 0 0 0 0
knaas 10/1/2017 0 0 0 0 0 0 0
knaas 11/1/2017 0 0 0 0 0 0 0
knaas 12/1/2017 0 0 0 0 0 0 0
ArtCort0324 1/1/2017 0 0 0 0 0 0 0
ArtCort0324 2/1/2017 0 2 0 2 0 0 0
ArtCort0324 3/1/2017 0 0 0 0 0 0 0
ArtCort0324 4/1/2017 0 1 1 0 0 0 0
ArtCort0324 5/1/2017 0 0 0 3 0 0 0
ArtCort0324 6/1/2017 0 0 0 0 0 0 9
df2:
UserID Month msg_count
ArtCort0324 1/1/2017 0
ArtCort0324 2/1/2017 0
ArtCort0324 3/1/2017 0
ArtCort0324 4/1/2017 0
ArtCort0324 5/1/2017 0
ArtCort0324 6/1/2017 9
ArtCort0324 7/1/2017 0
ArtCort0324 8/1/2017 0
ArtCort0324 9/1/2017 0
ArtCort0324 10/1/2017 0
ArtCort0324 11/1/2017 0
ArtCort0324 12/1/2017 0
我尝试了以下代码片段。但它没有按预期工作
res = df2.set_index(['UserID', 'Month'])\
.combine_first(df1.set_index(['UserID', 'Month']))\
.reset_index()
updated_new = df1.merge(gitter, how='left', on=['UserID', 'Month'],
suffixes=('', '_new'))
updated_new['msg_count'] =
np.where(pd.notnull(updated_new['msg_count_new']),
updated_new['msg_count_new'], updated_new['msg_count'])
我需要输出如下
UserID Month A B C D E F msg_count
knaas 1/1/2017 0 0 0 0 0 0 0
knaas 2/1/2017 0 0 0 0 0 0 0
knaas 3/1/2017 0 0 0 0 0 0 0
knaas 4/1/2017 0 0 0 2 0 0 0
knaas 5/1/2017 0 0 0 0 0 0 0
knaas 6/1/2017 0 0 0 0 0 0 0
knaas 7/1/2017 0 0 0 0 0 0 0
knaas 8/1/2017 0 0 0 0 0 0 0
knaas 9/1/2017 0 0 0 0 0 0 0
knaas 10/1/2017 0 0 0 0 0 0 0
knaas 11/1/2017 0 0 0 0 0 0 0
knaas 12/1/2017 0 0 0 0 0 0 0
ArtCort0324 1/1/2017 0 0 0 0 0 0 0
ArtCort0324 2/1/2017 1 0 0 0 0 0 0
ArtCort0324 3/1/2017 0 0 0 0 0 0 50
ArtCort0324 4/1/2017 0 0 0 0 0 0 0
我已经将默认列msg_count
添加到df1
,默认值为0.我需要更新来自msg_count
的df1
,msg_count
的值为df2
,仅当UserId
和Month
在两个数据帧中相等时
听起来你想要一个merge
:
df_merge = pd.merge(left=df1, right=df2, on=['UserID', 'Month'], how='left']
您可能想要设置如何'inner', 'outer'
等...