【发布时间】:2021-03-02 21:13:52
【问题描述】:
有几件事要开始:
-
df1['Column x']和df2['Column x']not 长度相同,在我的情况下 df2 是比 df。 -
Column x和Column y都标记为Player,列值是对象(名称)
编辑:例如,数据看起来像这样,包含更多行和包含整数和浮点数的附加列。
df1
编辑:CSV sn-p
,Player,% Owned,+/-,GP,
0,Player1,3%,0%,0,
1,Player2,91%,0%,1,
2,Player3,99%,0%,1
df2
,Player,% Owned,+/-,GP,
0,Player1,7%,8%,1,
1,Player2,94%,0%,0,
2,Player3,99%,0%,0,
3,Player4,57%,-0.3%,0,
4,Player5 0%,10%,1,
5,Player6,20%,50%,0
**
预期输出:
**
| index | Player | % Owned | +/- | ... |
|---|---|---|---|---|
| 3 | Player4 | 57% | -0.3% | x |
| 4 | Player5 | 0% | 10% | y |
| 5 | Player6 | 20% | 50% | z |
我的预期输出将只是 df2 中存在的行,而不是 df2 中的行。我只是在寻找一种解决方案,该解决方案可以识别或定位并返回 df2 中包含唯一 Player 值的行;它只需要在df2['Player'] 中查找异常并忽略其他列。
我的数据框由 NBA 球员的表现统计数据/指标组成; df1 是第一周比赛的统计数据,df2 是下一周比赛的数据,因此第二周不可避免地会有少数新玩家没有参加第一周,以此类推,以此类推。
我的目标是找出那些在 df2 中但没有出现在 df1 中的玩家。
这看起来很简单,但我想出的解决方案很笨拙,而且我确信实际上有办法做到这一点。
这是我目前使用的方法的一个示例。
df_concat = pd.concat([df2,df1], axis=0)
df_mask = (df_concat.assign(mask1=df_concat.duplicated('Player'), mask2=~concatenated.df_concat('Player', keep=False)))
df_expose = df_mask.loc[(df_mask['mask1'] == False) & (df_mask['mask2'] == True)]
'df_expose' 包含我正在寻找的配置文件,但我确信有更好的方法。
有什么想法吗?
【问题讨论】:
-
请edit您的问题将您的示例数据包含为文本,而不是图片或链接,以制作我们可以测试的minimal reproducible example。
-
您可以尝试使用外部join or merge,或使用isin() 反转选择
-
这是一篇关于如何找到两个数据帧之间差异的好文章。它包括解决方案:df3 = df1.merge(df2, how = 'outer' ,indicator=True).loc[lambda x : x['_merge']=='right_only']。 kanoki.org/2019/07/04/pandas-difference-between-two-dataframes
-
@pakpe 我已经阅读了这篇文章,不幸的是只考虑了等长的 dfs。
-
没有。我在您的数据库上尝试了上述方法,效果很好。
标签: python pandas macos dataframe