Python 比较来自不同数据帧的两个列值
我有两个数据帧,我已经阅读了熊猫。两者都包含一个日期列和一个股票列,我想知道这两列中的对应值是否匹配。如果它们匹配,我想用unique_值中相应的体积和价格值更新test_版本 我正在使用Python和Jupyter笔记本Python 比较来自不同数据帧的两个列值,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我有两个数据帧,我已经阅读了熊猫。两者都包含一个日期列和一个股票列,我想知道这两列中的对应值是否匹配。如果它们匹配,我想用unique_值中相应的体积和价格值更新test_版本 我正在使用Python和Jupyter笔记本 # unique_values Index Stock Date Volume Price Score 0 1 ASO 1 4650600.0 31.139999 0.5719 272
# unique_values
Index Stock Date Volume Price Score
0 1 ASO 1 4650600.0 31.139999 0.5719
272 273 GME 1 6218300.0 184.500000 0.9995
403 404 AMC 1 44067000.0 10.200000 0.9995
435 436 TSLA 1 28271800.0 691.619995 0.9686
509 510 AMD 1 29327900.0 81.440002 0.9686
... ... ... ... ... ... ...
11185 11186 AAPL 15 94812300.0 133.110001 -0.9399
11292 11293 BABA 15 12093900.0 229.880005 0.3907
11302 11303 CLOV 15 41659000.0 8.620000 0.9519
11464 11465 NIO 15 71208600.0 36.930000 0.4588
11478 11479 MVIS 15 16808800.0 10.390000 0.9753
[192 rows x 6 columns]
# test_version
Stock Date Volume Price Score
0 GME 1 1 1 0.194760
1 GME 2 1 1 0.126104
2 GME 3 1 1 0.041961
3 GME 4 1 1 0.039760
4 GME 5 1 1 0.105480
.. ... ... ... ... ...
10 CLOV 11 1 1 NaN
11 CLOV 12 1 1 0.145852
12 CLOV 13 1 1 0.224382
13 CLOV 14 1 1 0.226059
14 CLOV 15 1 1 0.120781
[210 rows x 5 columns]
我不确定我是否正确处理了这个问题,但以下是我尝试过的:
unique_volume.reset_index(drop=True)
test_version.reset_index(drop=True)
test_version['Volume'] = np.where(test_version['Date'] == unique_volume['Date'] and test_version['Stock'] == unique_volume['Stock'], unique_volume['Volume'])
#Output
ValueError: Can only compare identically-labeled Series objects
我渴望得到如下形式的输出:
# Desired Output
Stock Date Volume Price Score
0 GME 1 6218300.0 184.500000 0.194760
.. ... ... ... ... ...
14 CLOV 15 6218300.0 184.500000 0.120781
[210 rows x 5 columns]
如果我正确理解了您的问题,那么合并()数据帧应该适合您:
test_version = pd.merge(test_version[['Date', 'Stock']], unique_volume[['Date', 'Stock', 'Volume', 'Price']], on = ['Date', 'Stock'], how = 'left')
这在某种程度上是在进行中的,但它在数据框中添加了新的列:
Stock Date Volume\u x Price\u x Score Volume\u y Price\u y
0 GME 1 1 1 1 0.194760 6218300.0 184.500000
所以您不需要第一个数据框中的股票、日期、价格和数量?我已经编辑了我的答案。谢谢!太好了!:)为了确保我也理解它:我们从test_版本中获取'Date'和'Stock'列,从unique_volume中获取其他4列,比较它们各自的'Date'和'Stock'值,然后将右侧数据框中缺少的列合并到左侧数据框中?@OLGJ你完全正确!如果您发现答案是有用的,请考虑接受和投票的答案,以保持堆栈溢出循环完整。