我有 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
df0 像这样:
foo bar baz
A 1 0
A 2 7
A 6 5
在两个 dfs 中,“foo”可以采用除“A”之外的其他值。
我想向 df 的每一行添加 df0 的行数,其中 row.foo == df0.foo 且 row.bar < df0.bar 且 row.baz >= 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"])
杨魅力
相关分类