python - 连接两个 DF,不包括不在一个 df 中的行
问题描述
我有两个熊猫 dfs:
df1
id_event id_indiv odds
0 11545 3131 0.185185
1 11545 4529 0.088106
2 11545 9168 0.055402
3 11545 12922 0.088106
4 11545 12929 0.270270
5 11545 19936 0.037523
6 11545 24703 0.202020
7 11545 25951 0.043573
8 11545 26397 0.029762
9 11545 28177 0.219780
df2
id_event id_indiv final_odds
0 11545 3131 0.215054
1 11545 4526 -1.000000
2 11545 4529 0.060423
3 11545 9168 0.050251
4 11545 12922 0.060423
5 11545 12929 0.250000
6 11545 19936 0.019900
7 11545 24703 0.392157
8 11545 25951 0.052910
9 11545 26397 0.034014
10 11545 28177 0.377358
在此示例中,有一个人的最终赔率为 -1.00,这使得丢弃小于 0 的值变得容易:
df2.drop(df2[df2['final_odds']<0].index, inplace = True)
但是,运行此命令后,生成的 DF 大小不同:
df1
[8781 rows x 38 columns]
df2
[8737 rows x 38 columns]
DF 包含数以千计的事件和个人。我需要连接两个 dfs,以使生成的 df 具有以下形状:
df3
id_event id_indiv odds final_odds
0 11545 3131 0.185185 0.215054
1 11545 4529 0.088106 0.060423
2 11545 9168 0.055402 0.050251
3 11545 12922 0.088106 0.060423
4 11545 12929 0.270270 0.250000
5 11545 19936 0.037523 0.019900
6 11545 24703 0.202020 0.392157
7 11545 25951 0.043573 0.052910
8 11545 26397 0.029762 0.034014
9 11545 28177 0.219780 0.377358
我尝试使用此命令执行创建一个新的临时 df,它仅包含 df1 中存在的行,但收到错误:
temp_df = df1.drop(df2[df2['id_indiv'] !=df1['id_indiv'] | df2['id_event'] != df1['id_event']].index )
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
有没有办法连接这两个 dfs 以获得与我上述预期输出匹配的结果 df?我相信最终的 df 应该是 8737 x 38 列的大小。
解决方案
A) 如果您认为 id 列中有重复项
首先,让我们获取您感兴趣的 df2 的子集。
df2_subset = df2[df2['final_odds']>=0]
# Then, eliminate duplicates based on the subset ['id_event','id_indiv']
df2_subset = df2_subset.groupby(['id_event','id_indiv'], as_index=False).nth(0)
一旦我们有了 df2_subset,我们就可以合并。
df3 = df1.merge(df2, on=['id_event','id_indiv'],how='left')
B)如果您知道 id 列中没有重复项
您可以在一行中解决您的问题。
df3 = df1.merge(df2[df2['final_odds']>=0], on=['id_event','id_indiv'],how='left')
推荐阅读
- python - 字典的 Python 特定值平均值
- cordova - 在cordova上复制额外的文件准备
- r - 在没有 fPortfolio 包的情况下建立 15 只股票的均值方差边界
- python - 需要删除 JSON 对象中的数组
- security - 如何在 Xamarin.Forms 中使用内部存储
- android - 在 Android 上缩放图像会使图像呈现在 ImageView 边界之外
- javascript - 创建反应应用 + 反应惰性 + 绝对导入
- checkbox - 在 Xmarin.Forms 的 ViewCell 中切换 CheckBox
- javascript - 如何处理浏览器中的三星 S-Pen 按钮事件(Javascript)?
- javascript - EJS 文件显示日期不正确(日期落后一号)