我有一个df1
Date Open Expiry Entry Strike
0 2020-01-03 12261.10 2020-01-09 12200.0
1 2020-01-10 12271.00 2020-01-16 12200.0
2 2020-01-17 12328.40 2020-01-23 12300.0
3 2020-01-24 12174.55 2020-01-30 12100.0
4 2020-01-31 12100.40 2020-02-06 12100.0
我想从df2添加值
Date Expiry Type Strike Price Open Close
0 2020-01-03 2020-01-09 CE 13100 0.0 65.85
1 2020-01-03 2020-01-09 CE 13150 0.0 59.40
2 2020-01-03 2020-01-09 CE 13200 0.0 53.55
3 2020-01-03 2020-01-09 CE 13250 0.0 48.15
4 2020-01-03 2020-01-09 CE 13300 0.0 43.25
我想将列Date , Expiry and Entry Price
的元素与df2的Date ,Expiry and Strike Price
进行比较,如果条件匹配,则将相应的Open
列元素添加到df1。当我直接比较列时,出现类似的错误。
ValueError: Can only compare identically-labeled Series objects
感谢您的帮助
答案 0 :(得分:2)
您尝试进行简单的合并,看看它是否可以解决您想要的问题。
执行以下操作:
pd.merge(df1,df2,how='left', left_on=['Date','Expiry','Entry Strike'], right_on=['Date','Expiry','Strike Price'])
您的输出将如下所示。为此,我修改了第一行以使其匹配。否则,数据将没有匹配的记录。
Date Open_x Expiry ... Strike Price Open_y Close
0 2020-01-03 12261.10 2020-01-09 ... 12200.0 0.0 43.25
1 2020-01-10 12271.00 2020-01-16 ... NaN NaN NaN
2 2020-01-17 12328.40 2020-01-23 ... NaN NaN NaN
3 2020-01-24 12174.55 2020-01-30 ... NaN NaN NaN
4 2020-01-31 12100.40 2020-02-06 ... NaN NaN NaN
然后您可以删除所有不需要的列。
答案 1 :(得分:1)
您也可以尝试应用Apply功能
from sklearn.metrics import precision_recall_fscore_support
precision_recall_fscore_support(y_true, y_pred, average='macro')
这也将起作用,请检查下面的输出,我更改了其中一个值以匹配一行。
def check(row):
dt = row['Date']
ex = row["Expiry"]
sp = row["Entry Strike"]
return df2[(df2['Date']==dt) & (df2['Expiry']==ex) & (df2["Strike Price"]==sp)]['Open']
df1['new_col'] = df1.apply(lambda x: check(x), axis = 1)