例如,我有两个数据帧
DF1:
Shape
DF2:
0 1 2 3
0 Name Unit Attribute Date
1 a A xxy xxx
2 b B xyx xxx
3 c C xxx xxx
4 d D yxx xxx
5 e E yxy yyy
我想用df2中的相应条目覆盖df1中的条目。
例如,用df2.loc [2,2]覆盖df1.loc [5,3]。也就是说,对于具有相同“名称”的行,如果它位于df2中,则覆盖df1的相同列。
目前,我正在以愚蠢的方式这样做:
0 1 2
Name Unit Date
0 a F xxx
1 b G xxx
2 e H xxx
3 f I xxx
我并不为此感到自豪。我做了一些研究,并提出用set_value()替换'=',这有帮助。我真的很期待听到其他建议。实际问题的大小是200行和30列。因此,遍历所有for循环需要20秒。
答案 0 :(得分:2)
IIUC,使用merge
和fillna
。您需要稍微清理一下数据。这是我用来参考的内容。
df1
Name Unit Attribute Date
0 a A xxy xxx
1 b B xyx xxx
2 d C xxx xxx
3 e D yxx xxx
4 e E yxy xxx
df2
Name Unit Date
0 a F xxx
1 b G xxx
2 e H xxx
3 f H xxx
out = df1[['Name', 'Attribute']].merge(df2, how='left').fillna(df1)
out
Name Attribute Unit Date
0 a xxy F xxx
1 b xyx G xxx
2 d xxx C xxx
3 e yxx H xxx
4 e yxy H xxx