如果要应用第二个帧中的条件,我想更新一个数据帧的值。
现在,我遍历第二帧的每一行,以找到它在第一帧中的位置,并在找到该行时对其进行更新,但这非常浪费资源。
是否有更好的合并方法?
例如,对于在T2中找到的值,我想将T1中的解析更新为“是”
T1
user_id version issue Resolved
1 12345 crash no
2 12346 printing no
3 12347 screen no
3 12348 screen no
T2
user_id version issue
1 12345 crash
2 12346 printing
谢谢!
预期输出:
T1
user_id version issue Resolved
1 12345 crash yes
2 12346 printing yes
3 12347 screen no
3 12348 screen no
答案 0 :(得分:2)
您可以在新数据中添加“是”,然后将两者合并
T2['Resolved'] = 'yes'
dtypes = T1.dtypes.combine_first(T2.dtypes)
T3 = T2.combine_first(T1)
for k, v in dtypes.iteritems():
T3[k] = T3[k].astype(v)
输出:
user_id version issue Resolved
0 1 12345 crash yes
1 2 12346 printing yes
2 3 12347 screen no
3 3 12348 screen no
我找到了一种无需转换为浮点数的组合方式:
T3 = T2.astype('object').combine_first(T1)
所以您不再需要for循环
检查此解决方案,其中Combine_first无效。我将地图创建为是,并将其应用于第一帧:
T1 = pd.DataFrame({'A': [1,1,2,3], 'B': ['no', 'no','no','no'], 'C': ['no1', 'no2','no3','no4']})
T2 = pd.DataFrame({'A': [2, 3], 'B': ['yes','yes']})
mapitems = T2.set_index('A').to_dict()['B']
T1['B'] = T1.apply(lambda x: mapitems[x.A] if x.A in mapitems.keys() else x.B, axis=1)