Python 熊猫计数与条件对应的其他df中的行
我有两个dfs:df和df0 df看起来像这样:Python 熊猫计数与条件对应的其他df中的行,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有两个dfs:df和df0 df看起来像这样: foo bar baz A 1 5 A 1 10 A 1 18 A 2 14 A 2 18 A 2 22 A 6 6 A 6 15 foo bar baz A 1 0 A 2 7 A 6 5 df0如下所示: foo bar baz A 1 5 A 1 10 A 1 18 A 2 14 A 2 18 A 2
foo bar baz
A 1 5
A 1 10
A 1 18
A 2 14
A 2 18
A 2 22
A 6 6
A 6 15
foo bar baz
A 1 0
A 2 7
A 6 5
df0如下所示:
foo bar baz
A 1 5
A 1 10
A 1 18
A 2 14
A 2 18
A 2 22
A 6 6
A 6 15
foo bar baz
A 1 0
A 2 7
A 6 5
在两个dfs中,foo可以采用除A以外的其他值
我想向df的每一行添加df0的行数,其中row.foo==df0.foo和row.barfoo bar baz n
A 1 5 0
A 1 10 2
A 1 18 2
A 2 14 1
A 2 18 1
A 2 22 1
A 6 6 0
A 6 15 0
我在下面有一个工作版本,但它在df上迭代,这本身就很慢~30次迭代/秒,df可以有数百万行。是否有一种矢量化/更快的方法来实现同样的目标
rows = []
for row in df.itertuples():
rows.append([row.baz, row.foo, row.bar, len(df0.loc[(row.bar < df0.bar) & (row.baz >= df0.baz) & (row.foo == df0.foo)])])
df = pd.DataFrame(rows, columns=["baz", "foo", "bar", "n"])
我们可以通过外部合并来实现这一点。然后检查您的条件,最后使用GroupBy.sum获取n列:
我们可以通过外部合并来实现这一点。然后检查您的条件,最后使用GroupBy.sum获取n列:
第三排是如何得到n=4的?@Erfan-oops。我用df本身而不是df0计算输出。错误现在应该已经纠正了。第三排的n=4是怎么得到的?@Erfan-oops。我用df本身而不是df0计算输出。错误现在应该已经纠正了。谢谢,那要快得多。我不知道为什么我自己没想到,一点也不复杂。谢谢,那要快得多。不知道为什么我自己没想到,一点也不复杂。