Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫计数与条件对应的其他df中的行_Python_Python 3.x_Pandas - Fatal编程技术网

Python 熊猫计数与条件对应的其他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

我有两个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   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.bar=df0.baz

因此,产出将是:

foo 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计算输出。错误现在应该已经纠正了。谢谢,那要快得多。我不知道为什么我自己没想到,一点也不复杂。谢谢,那要快得多。不知道为什么我自己没想到,一点也不复杂。