因此,每当两个列ColA
和ColB
匹配时,我都会尝试用DF2
中来自Date
的值来更新DF1
中的Date
,如下所示:
DF1:
ColA | ColB | Date
a | b | 12/22/2099
a | s | 12/22/2099
v | p | 12/22/2099
v | s | 12/22/2099
m | p | 12/22/2099
DF1 = pd.DataFrame( { 'ColA': ['a','a','v','v','m'], 'ColB': ['b','s','p','s','p'], 'Date': ['12/22/2099','12/22/2099','12/22/2099','12/22/2099','12/22/2099'] } )
DF2:
ColA | ColB | Date
a | b | 9/11/2022
a | s | 9/11/2022
v | s | 10/9/2022
m | p | 9/25/2022
DF2 = pd.DataFrame( { 'ColA': ['a','a','v','m'], 'ColB': ['b','s','s','p'], 'Date': ['9/11/2022','9/11/2022','10/9/2022','9/25/2022'] } )
为了更新DF1
中的日期,我这样做了:
>>> DF1.set_index(['ColA','ColB'], inplace=True)
>>> DF1.update(DF2.set_index(['ColA','ColB']))
>>> DF1.reset_index(inplace=True) # to recover the initial structure
但是当我打印显示DF1
的结果时,我得到的结果是:
ColA | ColB | Date
a | b | 9/11/2022
a | s | 9/11/2022
v | s | 10/09/2022
v | p | 4101580800000000000
m | p | 9/25/2022
所以..。很明显,这一行到底是怎么回事:
v | p | 4101580800000000000
它根本不应该被更新,因为它只存在于DF1
而不是DF2
?这到底是怎么回事?
发布于 2020-01-22 22:02:41
运行:
DF1['Date'] = DF1['Date'].apply(pd.to_datetime)
DF2['Date'] = DF2['Date'].apply(pd.to_datetime)
然后是update
发布于 2020-01-22 22:15:13
您可以在操作之前将日期转换为字符串:
DF1['Date'].strftime('%m/%d/%Y')
DF2['Date'].strftime('%m/%d/%Y')
https://stackoverflow.com/questions/59868755
复制相似问题