我有一个约一百万行的大型数据框。它们通过“关键字”列与附加的“ X”和“ Y”列进行分组。
X Keyword Y
yy apply yy
xx apply yy
xy apply yx
xx terms ix
yy terms xi
我想对这些关键字执行某些功能,但情况有些尴尬。基本上,对于每组关键字,我想执行以下操作:
如果大小大于一行:
删除列“ x”等于列“ y”的行
保留其余的行
但是,对于只有一行的组,其中唯一的行是'x'=='y',则忽略它。
我目前所拥有的是:
df = df.merge(another_df, on='Keyword', how="inner")
df = df.groupby('Keyword').apply(group_filter)
def group_filter(group):
if len(group) > 1:
group = group.query('x != y')
return group
这个过程有点慢,我想知道是否有更快的方法可以做到这一点?
最佳答案
是的,apply
不太快。但是,IIUC可以将操作向量化:
group_size = df.groupby("Keyword")["Keyword"].transform("count")
x_eq_y = df["X"] == df["Y"]
df_out = df.loc[(group_size == 1) | (~x_eq_y)]
这给了我
In [76]: df
Out[76]:
X Keyword Y
0 yy apply yy
1 xx apply yy
2 xy apply yx
3 xx terms ix
4 yy terms xi
5 ab unique ab
In [77]: group_size = df.groupby("Keyword")["Keyword"].transform("count")
In [78]: x_eq_y = df["X"] == df["Y"]
In [79]: df.loc[(group_size == 1) | (~x_eq_y)]
Out[79]:
X Keyword Y
1 xx apply yy
2 xy apply yx
3 xx terms ix
4 yy terms xi
5 ab unique ab
关于python - 加快 Pandas 速度适用于一批团体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43847431/