我有两个数据框,它们都有Order ID
和date
。
我想在第一个数据框df1
中添加一个标记:如果具有相同order id
和date
的记录位于数据框df2
中,则添加{{ 1}}:
Y
为了实现这一点,我打算创建一个密钥,它将是[ df1['R'] = np.where(orders['key'].isin(df2['key']), 'Y', 0)]
和order_id
的串联,但是当我尝试以下代码时:
date
我收到此错误
df1['key']=df1['Order_ID']+'_'+df1['Date']
df1看起来像这样:
ufunc 'add' did not contain a loop with signature matching types dtype('S21') dtype('S21') dtype('S21')
这些是数据类型:
Date | Order_ID | other data points ...
201751 4395674 ...
201762 3487535 ...
答案 0 :(得分:19)
问题在于你无法将一个对象数组(包含字符串)添加到数字数组中,这只是模棱两可的:
>>> import pandas as pd
>>> pd.Series(['abc', 'def']) + pd.Series([1, 2])
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U21') dtype('<U21') dtype('<U21')
您需要明确地将Dates
转换为str
。
我不知道如何在熊猫中有效地做到这一点,但你可以使用:
df1['key'] = df1['Order_ID'] + '_' + df1['Date'].apply(str) # .apply(str) is new