我可能会做一些事情(窃取 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