【发布时间】:2021-11-17 20:12:22
【问题描述】:
我正在尝试根据不同的列比较两个数据帧,并根据它为数据帧分配一个值。
df1:
date value1 value2
4/1/2021 A 1
4/2/2021 B 2
4/6/2021 C 3
4/4/2021 D 4
4/5/2021 E 5
4/6/2021 F 6
4/2/2021 G 7
df2:
Date percent
4/1/2021 0.1
4/2/2021 0.2
4/6/2021 0.6
输出:
date value1 value2 per
4/1/2021 A 1 0.1
4/2/2021 B 2 0.2
4/6/2021 C 3 0.6
4/4/2021 D 4 0
4/5/2021 E 5 0
4/6/2021 F 6 0
4/2/2021 G 7 0.2
代码1:
df1['per'] = np.where(df1['date']==df2['Date'], df2['per'], 0)
错误:
ValueError: Can only compare identically-labeled Series objects
注意:将 df2['Date] 的列值更改为 df2['date] 然后尝试合并 代码2:
new = pd.merge(df1, df2, on=['date'], how='inner')
错误:
ValueError: You are trying to merge on object and datetime64[ns] columns. If you wish to proceed you should use pd.concat
【问题讨论】:
-
合并可能是最好的方法。你可能想有
how='left'的想法。该错误是因为您的日期列是不同的数据类型,一种是对象(可能是字符串),另一种是日期时间。如果您转换其中一列以匹配另一列,(使它们都是对象或都日期时间)合并应该工作