根据另一个数据框中的数据量删除一个数据框中的行

2024-05-06

我有两个 pandas 数据框A and B. B是 A 的子集。

我想删除 A 中的所有数字(如果 B 中存在该数字)。But,如果一个数字在 A 中出现两次,在 B 中出现 1 次,那么它只会从 A 中删除该数字的 1 次出现。

这是我的示例数据集:

df_A                df_B
[Test]              [Test]
1                   1
2                   2         
3                   5 
2                   5 
4
5
5

操作后我想要新的数据框 c 作为

df_C
[Test]
3
2
4

您能建议如何做到这一点吗?

The 建议重复 https://stackoverflow.com/questions/39880627/in-pandas-how-to-delete-rows-from-a-data-frame-based-on-another-data-frame删除所有出现的位置A如果存在于B,而不仅仅是前 N 次出现。


我可能会做一些事情(窃取 SR 的设置):

dfA = pd.DataFrame({'A': [1, 2, 3, 2, 4, 5, 5]})
dfB = pd.DataFrame({'B': [1, 2, 5, 5]})

counts = dfA.groupby('A').cumcount()
limits = dfB['B'].value_counts().reindex(dfA.A).fillna(0).values
dfC = dfA.loc[counts >= limits]

这给了我

In [121]: dfC
Out[121]: 
   A
2  3
3  2
4  4

这是通过使用 groupby 来获取 A 中给定值之前出现的次数来实现的:

In [124]: dfA.groupby('A').cumcount()
Out[124]: 
0    0
1    0
2    0
3    1
4    0
5    0
6    1
dtype: int64

并使用value_counts获得限制,然后我们重新索引以匹配计数:

In [139]: dfB['B'].value_counts()
Out[139]: 
5    2
2    1
1    1
Name: B, dtype: int64

In [140]: dfB['B'].value_counts().reindex(dfA.A)
Out[140]: 
A
1    1.0
2    1.0
3    NaN
2    1.0
4    NaN
5    2.0
5    2.0
Name: B, dtype: float64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据另一个数据框中的数据量删除一个数据框中的行 的相关文章

随机推荐